2011-08-20 16 views
15

の任意のアイデア(「wgetの-qO-」から)パイプで連結されたzipファイルを解凍する方法:バッシュ - このようなパイプで連結された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 
+0

ZCAT使用し、それらのそれぞれのGitのミラーが用意されました。それ以外の場合は私のコメントを無視してください:)そうでなければ、そのようなパスを使ってインストールを自動化する方法と、Gitサブモジュール/ Composerをhttps://github.com/wp-plugins – renoirb

答えて

6

wget -qO- -O tmp.zip http://downloads.wordpress.org/plugin/akismet.2.5.3.zip && unzip tmp.zip && rm tmp.zip

+2

前回の処理が正常に終了した場合にのみ、次のコマンドが開始されると、&&を使用する方が良いでしょう。ありがとう – Roger

+1

これは、ジッパーをパイプで抽出していません。あなたの提案では、より多くのディスクスペースを使い、それを着用する必要があります(ファイルが大きい場合はSSDで重要です)。また、ダウンロードと抽出を直接並列化する方が効率的です。 –

3

私はfunzip(http://www.info-zip.org/mans/funzip.html)を見てみましょうと思います。それはノートのmanページ、

...filter for extracting from a ZIP archive in a pipe 
申し訳

私は例を持っていないが、それはLinuxのunzipユーティリティが付属していませんように見えます。

+1

最初のファイルだけをダンプします。 ファイル引数のないfunzipはフィルタとして機能します。つまり、ZIPアーカイブ(またはgzip'd(1)ファイル)が標準入力にパイプされていると仮定し、最初のメンバー**をアーカイブからstdoutに抽出します。 –

6

以下はbashで動作しませんが、それはzshの中で動作します。多くのzshのユーザーがここで終わる可能性がありますので、それはまだ役に立つことがあります。

unzip =(wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip) 
+1

これは、元の質問ではないunzipを実行する前に、このファイルをダウンロードすることに注意してください。 –

+1

真。残念なことに、zipファイル形式はファイルの最後に "中央ディレクトリ"を置き、ファイルを処理する前に解凍アルゴリズムが最初にそのディレクトリを読み取ります。したがって、正確に解凍する真の配管ソリューションは実際には可能性はありません。 (これは、大きなアップロードされたzipファイルを処理したいWebアプリケーションにとっても問題です。ストリーミング形式では実行できません) –

+1

ファイルの最後に「権限」情報を含むインデックスがある(各削除時にファイルを再生成する必要なしに)アーカイブからファイルが削除された場合、実際に各ファイルの前にヘッダーがあるので、bsdtarを使用して単純なZIPをパイプラインで抽出できます。 bsdtarは、アーカイブが変更された場合(おそらくアーカイブの最後まで最新バージョンであることが分かっていないため、「ファントム」ファイルが表示される)、悪い結果をもたらす可能性があります。 –

19

ZIPファイル形式は、アーカイブの末尾にディレクトリ(インデックス)が含まれています。このディレクトリには、アーカイブ内の各ファイルの場所が示されているため、アーカイブ全体を読むことなく、素早くランダムにアクセスできます。

これは、パイプを通してZIPアーカイブを読み込もうとすると、インデックスが最後までアクセスされず、個々のメンバーが完全に読み込まれてからファイルが完全に読み込まれ、使用できなくなりました。このように、ほとんどのZIPデコンプレッサーは、アーカイブがパイプを通じて供給されたときに単に失敗するということは意外なことです。

アーカイブの末尾のディレクトリは、のファイルメタ情報がアーカイブに保存されている場所ではありません。さらに、個々のエントリは、冗長性のために、この情報をローカルファイルヘッダにも含める。

インデックスが利用できない場合、すべてのZIP解凍器は、ローカル・ファイル・ヘッダーを使用し、tarとcpioのフロントは(bsdtarとbsdcpio別名)作者libarchiveし終了していないが、缶とパイプを通って読むときことを意味し、そうします以下が可能です:あなたがワードプレスで動作するようにgitを使用している場合質問は、有効ですが

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | bsdtar -xvf- -C ~/Desktop 
0

はちょうど

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | zcat >> myfile.txt 
+0

これはO < - 覚えています – SepGuest

関連する問題