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

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

特定のディレクトリにアーカイブをダウンロードして解凍したいと思います。これまで私がしたことは次のとおりです。

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.gz。出力をパイプwgetで接続してターゲットをtar提供することは可能だと思いましたが、tar実際にはピースをどのように組み合わせるのかわかりません。

答え1

wgetペイロードを標準出力(フラグを使用-O-)に出力し、独自の出力を抑制(フラグを使用)するように指示することで-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

答え2

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

curl -s -L https://example.com/archive.tar.gz | tar xvz - -C /tmp

答え3

このオネライナーは次のことを行います。

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

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

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

答え4

リダイレクトを処理してファイルを抽出できるライナーですtar.bz2xzgzipファイルを抽出するために使用されます。

curl -L https://downloads.getmonero.org/cli/linux64 | tar xj

関連情報