web-dev-qa-db-ja.com

wgetでダウンロードしたファイルをtar経由でパイプするにはどうすればよいですか?

Tarball(この場合は.tar.gzファイル)をパイプしたいGNU Wget(wget)からtar -xzfまでダウンロードします(解凍するには、これが不明な場合)が、方法がわかりません。

wget -q -O- ${SRC_URI} | tar -xzf > ${DESTDIR}

そして

wget -q -O- ${SRC_URI} | `tar -xzf` > ${DESTDIR}

そして

wget -q -O- ${SRC_URI} | 'tar -xzf' > ${DESTDIR}

誰も私がやりたいことをやろうとはしませんでした。また、出力コンポーネント> ${DESTDIR}を省略し、tarにデフォルトの方法でtarballのコンテンツを抽出させてみました。通常、試行するたびに次のようなエラーが返されます。

tar: option requires an argument -- 'f'

tarballをダウンロードする前に、または何もしないで、${DESTDIR}で設定されたパスが作成されたかどうかを確認し(tarを残して生成したため)、作成されなかった。

2
BH2017

Stdinからtar.gzファイルを抽出するので、fオプションを指定する必要はありません。tarはデフォルトでstdinからの読み取りになります。

内容を$ DESTDIRに抽出する場合は、GNU tar-C(ディレクトリの変更)オプションも使用する必要があります。

$ SRC_URIまたは$ DESTDIRにスペースまたはシェルメタ文字が含まれている場合に備えて、変数を"引用符で囲みます-&*?およびお気に入り。

最後に、変数を囲む{}中括弧はここでは厳密には必要ありませんが、とにかくそのままにしておきます。確かに害はありません。

それをすべてまとめると、次のようになります。

wget -q -O- "${SRC_URI}" | tar -xz -C "${DESTDIR}"
5
cas

抽出する「ファイル」として-を指定する必要があります。 wgetコマンドはSTDOUT(-O-)に出力し、tarはSTDINを入力ファイルとして使用する必要があります:tar zxf -を抽出します。

1
Lambert