【问题标题】:Autotools - tar This does not look like a tar archiveAutotools - tar 这看起来不像 tar 存档
【发布时间】:2011-03-20 20:50:27
【问题描述】:

运行make distcheck 后,我收到消息说我已成功构建包并准备分发。如果我用tar -zxvf hello-0.2.tar.gz 解压tar.gz,它会成功提取其所有内容。但是,当我尝试在不同的机器中提取它们时,我得到:

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

奇怪的是它以前可以工作。

在我尝试构建包的机器上,我更新了我的automake 1.10.1, autoconf 2.61, and tar 1.20 to automake 1.11.1, autoconf 2.65, and tar 1.23,但仍然是同样的问题。

任何想法可能是什么问题?

【问题讨论】:

  • 这项工作是否有效:gzip -d hello-0.2.tar.gz 后跟:tar -xf hello-0.2.tar
  • @SyggyF:它确实有效。任何想法为什么这种方式有效而不是其他方式?

标签: tar autotools autoconf automake


【解决方案1】:

问题不在构建机器上;问题出在目标机器上。

并非所有版本的tar 都会自动识别解压缩以应用于压缩的tar 文件。鉴于gunzip 后跟tar 确实有效,那么目标机器上的tar 就是这样一个。主流Unix系统(AIX、HP-UX、Solaris)上的tar版本不能自动识别压缩的tar文件。 Linux 和 MacOS X 上的那些。

请注意,您可以使用:

gzip -dc hello-0.2.tar.gz | tar -xf -

避免创建中间未压缩文件。

【讨论】:

  • 1.最后的连字符只是一个错字,还是有什么作用? 2. 使用这种方法我得到错误tar: Archive is compressed. Use -z optiontar: Error is not recoverable: exiting now。如果我添加-z,它会给我tar: -z: Cannot open: No such file or directory
  • (1) 末尾的连字符表示输入文件是标准输入(-f -)。 (2) 您可能有一个双重压缩文件,尽管这不太可能。您可以尝试gunzip hello-0.2.tar.gz,然后使用file hello-0.2.tar 查看它认为您拥有的文件类型。您正在使用哪个版本的tar 可以识别存档已压缩但不解压缩?如果你使用tar -xzf -,你可能没问题。如果您使用tar -xf -z,那么您就是在告诉tar,要从中提取的文件是-z
【解决方案2】:

实际上,当您下载的服务器应用另一轮 GZip 并且您用于下载文件的客户端不读取/尊重 HTTP Content-Encoding 标头并存储 HTTP 有效负载时,可能会发生这种情况.

虽然文件看起来只有.tar.gz 的扩展名,但实际上是.tar.gz.gz。在您运行gunzip 后,一旦文件仅获得扩展名.tar,但这次运行tar 命令tar xf hello-0.2.tar 仍会识别GZip 格式并在解压缩之前再通过gunzip 隐式运行文件一次。

您可以通过运行 head hello-02.tar.gzhead hello-02.tar 来检查这一点。 GZip 是一种非常二进制的格式,而 tar 是人类可读的。如果 .tar 文件显得“过于二进制”,则您手头上有一个双重编码的文件。

【讨论】:

  • 正是我的问题。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2020-04-04
  • 2016-10-08
相关资源
最近更新 更多