如何通过 tar 通过管道传输使用 wget 下载的文件?

如何通过 tar 通过管道传输使用 wget 下载的文件?

我想通过管道传输 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 来生成它),但它没有。

答案1

当您从标准输入提取 tar.gz 文件时,不需要指定该f选项,tar默认从标准输入读取。

假设您要将内容提取到 $DESTDIR,您还需要使用 GNUtar-C(更改目录)选项。

我还在"变量两边加了引号,以防 $SRC_URI 或 $DESTDIR 包含任何空格或 shell 元字符 - &*?

最后,{}变量周围的大括号在这里并不是严格必要的,但我无论如何都将它们保留下来 - 它们当然不会造成任何伤害。

将所有这些放在一起,您将得到:

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

答案2

您需要指定-要提取的“文件”。该wget命令输出到 STDOUT ( -O-),tar 需要使用 STDIN 作为输入文件:tar zxf -来提取。

相关内容