我想通过管道传输 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 -
来提取。