目標は、標準入力からZipファイルを読み取り、標準出力に解凍することです。
Funzipは機能し、私が探しているソリューションです。Zipには単一のファイルが含まれていますが、残念ながら、圧縮ファイルのサイズが約1 GB以上の場合、funzipは失敗します。
funzip error: invalid compressed data--length error
更新:上記のエラーが実際のエラーを示していない可能性があることを発見しました。 2つの非圧縮ファイルを比較すると、1つは従来の方法で解凍され、もう1つはfunzipを使用してパイプ経由で(上記のエラーはstderrに書き込まれます)、ファイルは同一です。これを開いたままにして、確認または報告できるようにします。
Pythonを使用した関連ソリューション: パイプから飛んでいるファイルを解凍する
ただし、この出力はファイルに送られます。
単にzcat
を使用します。例えば:
cat file.Zip | zcat
上記の例では、cat file.Zip
を発行するだけで同じ結果が得られるという意味で、最初の部分(zcat file.Zip
)は冗長であることに注意してください。 zcat
がstdin
から読み取ることができることを示すためだけに含めました
解凍(file
へのリダイレクトあり):
cat file.gz | gunzip -c - > file
圧縮(file.gz
へのリダイレクトあり)):
cat file | gzip -c - > file.gz
私の答え の再投稿:
BusyBoxのunzip
は、標準入力を取り、すべてのファイルを標準出力に抽出できます。たとえば、wget
をstdinとして使用すると、
wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.Zip | busybox unzip -p -
-p
は、パイプするファイルを抽出します。後のダッシュは、入力としてstdinを使用することです。
また、( 前の 回答と同じように)
cat file.Zip | busybox unzip -p -
しかし、それはunzip -p file.Zip
の冗長です。
ディストリビューションがデフォルトでBusyBoxを使用している場合(Alpineなど)、unzip -p -
を実行します。