アーカイブをダウンロードして、アーカイブをディスクに保存せずに抽出する方法は?


62

特定のディレクトリにあるアーカイブをダウンロードして抽出したいのですが。ここに私がこれまでやってきた方法があります:

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

代わりに、ディスクに書き込まずにアーカイブをその場でダウンロードして抽出したいと思いますtar.gzwgetto の出力をパイピングし、ターゲットtarを与えることでこれが可能だと思いますtarが、実際には、ピースをどのように組み合わせるかわかりません。

回答:


95

wgetペイロードをstdoutに(flagを使用して-O-)出力し、独自の出力を(flagを使用して-q)抑制するように指示することで実行できます。

wget -qO- your_link_here | tar xvz -

ターゲットディレクトリを指定するには:

wget -qO- your_link_here | tar xvz - -C /target/directory

更新

あなたがGNUを持っている場合 tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

すべてを1ステップで実行できるようにする必要があります。

-q 静か

-O - stdoutへの出力


指定するパスは次のwget -qO- your_link_here | tar xvz - -C /target/directory
とおりです。– Marslo

たぶん、wgetの代わりにtarを使用するように人々に言ってください
アレクサンダーミルズ

wget -qO- <url> | tar -xvz -C <target folder>gnu tarに取り組みました。
AlikElzin-kilaka

14

別のオプションはcurl、デフォルトでstdoutに書き込むものを使用することです。

curl -s some_url | tar xvz -C /tmp

2
私はあなたのオプション他のものよりますが好きcurl -s some_url | tar xvz - -C /tmp
FiftiN

1
FiftiNは提案- >例えば、1つは使用することができ、リポジトリ内のファイルのフィルタリングされたリストを表示するには:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
アレックスGlukhovtsev

11

このonelinerはトリックを行います:

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

簡単な説明:括弧内の右側が最初に実行されます(-qwgetに静かに実行するよう指示し-O -、出力をstdoutに書き込むために使用されます)。

次に、Bashのプロセス置換演算子<(を使用して名前付きパイプを作成し、名前付きパイプを作成します。このようにして、一時ファイル記述子を作成し、<ファイルリダイレクト演算子を使用してその記述子の内容をtarに送ります。

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