ユニバーサル抽出器


19

増えアーカイブ/圧縮ファイルフォーマットの、それらすべてを支配する一つのフリー/オープンソースのコマンドラインツールはありますか?おそらく、一貫性のある/統一されたフラグのセットを持つものでしょうか?(tarへの私のフレンドリーな暗黙の参照に注意してください)

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

更新日: どのように私のようなのconfigure何かできるatoolのは、使用しないunzip(明らかに4GB以上のファイルを扱うことができない)のzipファイルを解凍すると、使用する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

1
さらに別のソリューション:packages.qa.debian.org/u/unp.html
frostschutz

@frostschutz。unpackと異なる可能性のあるものがあるかどうか知っていatoolますか?
アメリオバスケスレイナ

ダンノ エヴァンの答えが示すように、このようなプログラムはかなり簡単です。あなたのために働くものは何でも使用してください。zipファイルを解凍する場合、個人的な好みは7zです。
frostschutz

1
@ user815423426更新された質問の手順を既存の回答に追加しました。
スーパーマジック

回答:


17

私はatoolを使用します。それは仕事をします。すべてではありませんが、多くの形式で動作します:

tar、gzip、bzip2、bzip、lzip、lzop、lzma、zip、rar、lha、arj、arc、p7zipなど

これらの圧縮ツールはまだ必要ですが、atoolは単にそれらのフロントエンドであるためです。

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

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

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

リポジトリの更新:atoolは次のディストリビューションのリポジトリにあります(現在のリリースのみがチェックされています)。

  • フェドラ
  • Debian(@terdonに感謝します。おそらく、Ubuntuのような派生物です)
  • Ubuntu(qed、そしておそらくMintのような派生物)
  • オープンスーゼ
  • CentOS(および、おそらく、RHEL)
  • Arch Linux

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

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

atool構成ファイル~/.atoolrcを編集し、次の行を追加します。

path_unzip /usr/bin/gunzip

gunzipプログラムへの正しいパスを使用します。

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


ありがとう。これは素晴らしいですね。tarballをダウンロードできることに加えて、tarballの(git / bzr)リポジトリ、またはforkのフォークがあるかどうかを知っていますか?
アメリオバスケスレイナ

gitリポジトリが存在しないようです。、身震いがあり、CVSレポ:savannah.nongnu.org/cvs/?group=atoolを。ただし、ソースはtarballにあり、ツールはperlで記述されているため、あなたや衝動を感じる人は簡単に変更できます。
スーパーマジック

1
@ user815423426それはDebianリポジトリにもあります。
テルドン

9

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

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アーカイブを抽出するために少し変更しました。


これは素晴らしいですね。これはbash用ですか?
アメリオバスケスレイナ

私だけでこれをテストしたbashzsh、それはで動作するはずshにも。

これは、シェル機能にとって非常に美的です。1つの注意点は、関連するすべてのバイナリがインストールされていることを確認するか、インストールしていないバイナリの行を削除することです。
bgvaughan

3

AVFSファイルシステムのプレゼントすべてのアーカイブファイル(例えば、ファイルシステムのビュー/path/to/foo.zip()ディレクトリとしてアクセス可能である~/.avfs/path/to/foo/zip#。この例の場合)。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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.