web-dev-qa-db-ja.com

stdinから抽出するときにtarが圧縮タイプを自動検出するようにします

GNU tarを使用します。ファイルを圧縮/解凍するときに圧縮タイプを自動検出できます。しかし、アーカイブをstdinから解凍する必要があり、圧縮タイプが不明です。tarで正しい情報が得られることに気付きました。次のような提案:

tar: Archive is compressed. Use -z option

しかし、tarにその圧縮オプションを使用させたい自動的にその引数の入力を求めずに。どうやってやるの? tarはすでに圧縮タイプを知っているので、単に解凍してみませんか?

ありがとうございました!

16
james

最後に、tarがアーカイブをstdinから検出して解凍できない理由は、GNU tarを使用しているためです。BSDtarは問題なく自動的に実行できるため、代わりにbsdtarを使用することにしました。スクリプトのtarになりました。

8
james

これはあなたが聞きたい答えではありませんが、マニュアルによるとGNU tarではサポートされていません:

アーカイブの読み取り中に解凍オプションを指定する必要があるのは、ランダムアクセスをサポートしていないパイプまたはテープドライブから読み取る場合のみです。ただし、この場合、GNU tarは、使用するオプションを示します。例:

$ cat archive.tar.gz | tar tf -
tar: Archive is compressed.  Use -z option
tar: Error is not recoverable: exiting now

このような診断が表示された場合は、提案されたオプションをGNU tar:

$ cat archive.tar.gz | tar tzf -

- 8.1.1圧縮アーカイブの作成と読み取り

10
Kevin Panko