【问题标题】: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
    

    它会自动检测要使用的解压器(gzipbzip2xzlzip 等)。

    如果您的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 - 
      

      获得想要的效果。

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 1970-01-01
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        相关资源
        最近更新 更多