web-dev-qa-db-ja.com

ユニバーサルエクストラクター

増加する数 =アーカイブ/圧縮ファイル形式の場合、それらすべてを支配する単一のフリー/オープンソースのコマンドラインツールはありますか?おそらく、一貫性のある/統一されたフラグのセットを持つ何か? (私のフレンドリーなメモ tarへの暗黙の参照

tarや他のユーティリティへのバインディングを使用してファイルを圧縮/解凍するタスクを大幅に簡略化することを目的とした一連のエイリアスに出くわしましたが、これはもう見つかりません。

更新:atoolのようにunzipを使用してZipファイルを抽出しないようにするにはどうすればよいですか(これは明らかにt 4GBを超えるファイルを処理し、代わりにgunzipを使用しますか?

$ aunpack large_file.Zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.Zip
warning [large_file.Zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.Zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code
19

atool を使用します。それは仕事をします。すべてではありませんが、多くのフォーマットで機能します。

tar、gzip、bzip2、bzip、lzip、lzop、lzma、Zip、rar、lha、arj、arc、p7Zipなど.

これらの圧縮ツールは依然として必要ですが、atoolは単にそれらのフロントエンドです。

特に、サポートされているアーカイブ形式の内容を一覧表示するalsコマンドが気に入っています。

メインのatoolコマンドは、独自のフラグを使用してアーカイブを抽出します(適切なフラグを特定の基本的な抽出ツールに渡します)。

ああ、それはいくつかのディストリビューションのリポジトリにあります(私の場合はFedoraですが、私が覚えているように、Ubuntuを使用したときは、そのリポジトリにはありませんでした。ターボールからインストールしました)。

リポジトリの更新:atoolは次のディストリビューションのリポジトリにあります(現在のリリースは確認済みのみ):

  • Fedora
  • Debian(@terdonに感謝、そしておそらく、それはUbuntuのような派生物です)
  • Ubuntu(q.e.d.、そしておそらく、ミントのような派生物)
  • Open Suse
  • CentOS(そしておそらくRHEL)
  • Arch Linux

他にもあると思います...もっとも最近のディストリビューション。

更新された質問に対する回答「atoolのようなものを設定して、unzipを使用せずにZipファイルを抽出して...代わりにgunzipを使用するにはどうすればよいですか」

Atool設定ファイルを編集します~/.atoolrcを追加して次の行を追加します。

path_unzip /usr/bin/gunzip

あなたのgunzipプログラムへの正しいパスで。

この構成ファイルに入れることができる変数の完全なリストについては、manページを参照してください。変数にはたくさんあります。 gunzipに必要なコマンドラインオプションがunzipと異なる場合は、atoolソース(Perl)自体を変更する必要がある場合があります。

19
SuperMagic

いくつかのアーカイブタイプを処理する小さなシェル関数を次に示します。

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.Zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

オンラインでこの関数の 元のバージョン を見つけ、少し変更してarアーカイブとxz圧縮tarアーカイブを抽出しました。

9
user26112

[〜#〜] avfs [〜#〜] ファイルシステムは、すべてのアーカイブファイル(例:_/path/to/foo.Zip_)がディレクトリ(_~/.avfs/path/to/foo/Zip#_ forこの例)。 AVFSは、最も一般的なアーカイブファイル形式への読み取り専用アクセスを提供します。

_mountavfs
cp -Rp ~/.avfs$PWD/large_file.Zip\# extraction_directory
_

Avfsは、_/usr_のファイルを編集することで簡単に構成できる外部ヘルパーを使用します(残念ながら、avfs 1.0の時点では、_/usr/local_またはホームディレクトリのファイルを使用する方法はありません。_/usr_または再コンパイル)。 _/usr/share/avfs/extfs/ext-uzip_は_.Zip_ファイルを処理するスクリプトです。_/usr/bin/unzip_を使用しない場合は変更してください。代わりに7zを使用して問題を回避できる場合があります。_/usr/share/avfs/extfs/extfs.ini_を編集して、_ext-uzip_の行を_u7z .Zip_に変更してください。