Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入输出重定向UNIX_Unix_Gzip_Pipe_Tar_Cat - Fatal编程技术网

输入输出重定向UNIX

输入输出重定向UNIX,unix,gzip,pipe,tar,cat,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:这看起来不像tar归档文件 我不明白这是为什么。如果第一种情况下的gzip-d结果返回可以解释为tar存档的输出,为什么第二种情况下它不工作 我已经看到了,但我不认为这是我的案例中的tar问题,因为第一个命令有效…在我看来,第二个案例中

假设我有一个名为
package.tar.gz
那么我会:
cat package.tar.gz|gzip-d|tar tvf-
它向我显示了tar存档中的文件列表

但是,如果我这样做:
gzip-d package.tar.gz | tar tvf-
它说
tar:这看起来不像tar归档文件

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


我已经看到了,但我不认为这是我的案例中的tar问题,因为第一个命令有效…

在我看来,第二个案例中您没有传递
-d
选项。从主页上

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


最适合这种风格的可能是
zcat
,它听起来就是-gunzip+cat

这就是你想要做的吗

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


GNU
tar
将直接解压缩文件:

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
。这是压缩程序的“标准”行为。

基本上

gzip -d package.tar.gz
不会输出到标准输出,这

tar tvf - 
期待。结果

gzip -d package.tar.gz
文件被解压是一个副作用。需要使用

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

为了达到想要的效果。

我想你错过了猫的部分哦,是的,第二个很有效!你为什么要用<尽管如此?gzip-d package.tar.gz本身工作得很好,但与管道结合使用不起作用。。。
gzip -dc package.tar.gz | tar tvf -