【问题标题】:combining gunzip and tar commands in Solaris and AIX在 Solaris 和 AIX 中结合 gunzip 和 tar 命令
【发布时间】:2017-11-18 16:19:45
【问题描述】:

我正在运行以下命令来解压 Solaris 和 AIX 中的文件:

# gunzip /opt/myfile.tar.gz | tar -xvf-

但我收到此错误:

tar: Unexpected end-of-file while reading from the storage media.

我需要解决什么问题?

【问题讨论】:

  • 我知道还有其他方法可以解压它..!但我想要以上述方式。它应该可以正常工作..!?
  • 它不应该像指定的那样工作,因为gunzip 默认写入文件,而不是标准输出来读取管道。 gzcatgunzip -c 将其更改为写入标准输出。

标签: unix solaris tar aix gunzip


【解决方案1】:

为什么要这样做? gunzip 的默认行为将文件解压缩到位,用解压缩的文件替换打包文件,并且您没有指定将解压缩数据流放入标准输出的必要命令。因此 tar 命令不会通过管道接收任何要处理的内容,因此您会收到您所看到的错误消息。

这将起作用:

gunzip -c ../myfile.tar.gz | tar -xfv -

此命令行已在 Solaris 11.3 上测试...较旧的 Solaris 变体可能需要对命令行进行不同的排序,例如

gunzip -c ../myfile.tar.gz | tar -xvf -

【讨论】:

  • 在 macOS Sierra 上,BSD tar 将与 tar xfv -(选项前没有破折号)和 tar -xvf - 一起使用,但不适用于 tar -xfv -(选项前有破折号)。 tar 语法早于-X 的近乎普遍使用来指示选项;它最初只支持前面没有破折号的选项。该版本需要单个集群中的所有选项,如果出现f,则使用下一个参数作为 tar 文件名。 tar 的某些版本在选项前接受破折号,然后像 getopt() 函数那样对待 f;文件名紧随其后。
  • GNU tar 在这件事上与 BSD tar 的行为基本相同——如果选项以破折号开头,那么 -f 必须在集群的末尾,并且 tar 文件名附加到f 或在下一个参数中。 These more modern versions of tar support multiple command line options with arguments — they are fairly conventional when the option cluster starts with -.
【解决方案2】:

我认为这样的事情应该可行,但我没有 Solaris 系统来测试它...

gzip -dc /opt/myfile.tar.gz | tar xvf -

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 2017-10-27
    • 2014-12-07
    • 2021-11-24
    • 2021-10-14
    • 2011-03-10
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多