【问题标题】:Input output redirection UNIX输入输出重定向 UNIX
【发布时间】:2014-04-30 09:37:21
【问题描述】:
假设我有一个名为 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 的问题,因为第一个命令有效...
【问题讨论】:
标签:
unix
gzip
pipe
tar
cat
【解决方案1】:
在我看来,您在第二种情况下没有传递 -d 选项。来自手册页,
可以使用 gzip 将压缩文件恢复为原始格式
-d 或 gunzip 或 zcat。
最适合这种风格的可能是zcat,这就是它听起来的样子——gunzip + cat。
【解决方案2】:
GNUtar会直接解压文件:
tar -xf package.tar.gz
它会自动检测要使用的解压器(gzip、bzip2、xz、lzip 等)。
如果您的tar 无法处理解压缩,则gzip -cd 解密为标准输出:
gzip -cd package.tar.gz | tar -xf -
-c 选项表示从标准输入读取或写入标准输出(在本例中为写入); -d 选项表示解密。您也可以使用gunzip -c 代替gzip -cd。这是压缩程序的“标准”行为。
【解决方案3】:
这是你想做的吗?
gunzip -c package.tar.gz | tar xvf -
或者
gzip -cd package.tar.gz | tar xvf -
【解决方案4】:
基本上,
gzip -d package.tar.gz
不会输出到标准输出,即
tar tvf -
预计。结果
gzip -d package.tar.gz
是文件被解压缩的副作用。需要使用
gzip -dc package.tar.gz | tar tvf -
获得想要的效果。