输入输出重定向UNIX

时间:2014-03-23 00:32:41

标签: unix gzip pipe tar cat

说我有一个名为package.tar.gz的文件 然后我做:     cat package.tar.gz | gzip -d | tar tvf - 它显示了我的tar档案中的文件列表。

但是,如果我这样做:     gzip -d package.tar.gz | tar tvf - 它说tar: This does not look like a tar archive

我不明白为什么会这样。如果第一种情况下gzip -d的结果返回可以解释为tar存档的输出,为什么它在第二种情况下不起作用?

我见过Autotools - tar This does not look like a tar archive但是我不相信自从第一个命令起作用以来,tar就是一个问题...

4 个答案:

答案 0 :(得分:1)

在我看来,你并没有在第二种情况下传递-d选项。从联机帮助页,

  

使用gzip可以将压缩文件恢复为原始格式   -d或gunzip或zcat。

最适合这种风格的是zcat这听起来像是什么 - gunzip + cat。

答案 1 :(得分:1)

GNU tar将直接解压缩文件:

tar -xf package.tar.gz

它会自动检测要使用的解压缩程序(gzipbzip2xzlzip等。

如果您的tar无法处理解压缩,则gzip -cd会解密为标准输出:

gzip -cd package.tar.gz | tar -xf -

-c选项意味着从标准输入读取或写入标准输出(在这种情况下,写入); -d选项意味着解密。您也可以使用gunzip -c代替gzip -cd。这是压缩程序的“标准”行为。

答案 2 :(得分:0)

这是你想要做的吗?

gunzip -c package.tar.gz | tar xvf -

或者

gzip -cd package.tar.gz | tar xvf -

答案 3 :(得分:0)

基本上,

gzip -d package.tar.gz

不会输出到标准输出,

tar tvf - 

期望。

的结果
gzip -d package.tar.gz

是文件解压缩为副作用。需要使用

gzip -dc package.tar.gz | tar tvf - 

以获得理想的效果。