アーカイブをダウンロードして、特定のディレクトリに展開したいと思います。これが私がこれまでやってきた方法です:
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
にターゲットを指定することで可能になると思いますが、実際には、これらを組み合わせる方法がわかりません。
これを行うには、wget
にペイロードをstdoutに出力し(フラグ-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
すべてを1つのステップで実行できるはずです。
-q
静か
-O -
stdoutへの出力
もう1つのオプションは、デフォルトでstdoutに書き込むcurl
を使用することです。
curl -s some_url | tar xvz -C /tmp
このワンライナーはトリックを行います:
tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)
簡単な説明:括弧の右側が最初に実行されます(-q
はwgetに静かに実行するように指示し、-O -
はstdoutに出力を書き込むために使用されます)。
次に、Bash <(
のプロセス置換演算子を使用して名前付きパイプを作成し、名前付きパイプを作成します。このようにして、一時ファイル記述子を作成し、<
ファイルリダイレクト演算子を使用してその記述子の内容をtarに送信します。