次のように、パイプされたZipファイルを解凍する方法に関するアイデア:
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip
通常のファイルと同じように、ファイルをディレクトリに解凍したいと思いました。
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip | unzip -d ~/Desktop
wget -qO- -O tmp.Zip http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip && unzip tmp.Zip && rm tmp.Zip
Zipファイル形式には、アーカイブの最後にディレクトリ(インデックス)が含まれています。このディレクトリは、アーカイブ内の各ファイルの場所を示しているため、アーカイブ全体を読み取ることなく、すばやくランダムにアクセスできます。
これは、パイプを介してZipアーカイブを読み取ろうとすると問題が発生するように見えます。インデックスは最後までアクセスされないため、ファイルが完全に読み取られて使用できなくなるまで、個々のメンバーを正しく抽出できません。 。そのため、アーカイブがパイプを介して提供される場合、ほとんどのZipデコンプレッサが単に失敗するのは当然のことです。
アーカイブの最後のディレクトリは、ファイルメタ情報がアーカイブに格納されるonlyの場所ではありません。さらに、冗長性を確保するために、個々のエントリのローカルファイルヘッダーにもこの情報が含まれています。
インデックスが利用できない場合、すべてのZipデコンプレッサがローカルファイルヘッダーを使用するわけではありませんが、tarおよびcpioフロントエンドはlibarchive(別名bsdtarおよびbsdcpio)にcanおよびwillパイプを介して読み取る場合は、次のことが可能です。
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip | bsdtar -xvf- -C ~/Desktop
以下はbashでは機能しませんが、zshでは機能します。多くのzshユーザーがここで終了する可能性があるため、それでもまだ役立つ場合があります。
unzip =( wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip )
zcatを使用するだけ
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip | zcat >> myfile.txt
Funzip(http://www.info-Zip.org/mans/funzip.html)を見てみましょう。そのマニュアルページには、
...filter for extracting from a Zip archive in a pipe
申し訳ありませんが、例はありませんが、Linuxのunzipユーティリティが付属しているようです。
BusyBoxのunzip
は、標準入力を取り、すべてのファイルを抽出できます。
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip | busybox unzip -
unzip
の後のダッシュは、stdinを入力として使用するためのものです。
あなたもできます
cat file.Zip | busybox unzip -
しかし、それはunzip file.Zip
の冗長です。
ディストリビューションがデフォルトでBusyBoxを使用している場合(Alpineなど)、unzip -
を実行します。