2010-07-25 123 views
16

运行后make distcheck我收到消息,我已经成功构建了该包并准备好进行分发。如果我用tar -zxvf hello-0.2.tar.gz解开tar.gz,它会成功提取所有内容。然而,当我尝试在不同的机器中提取它们时,我得到:Autotools - tar这看起来不像一个tar归档文件

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,仍然是同样的问题。

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

+8

这是否工作:'gzip -d hello-0.2.tar.gz'后面跟着:'tar -xf hello-0.2.tar' – SiggyF 2010-07-25 23:13:34

+1

@SyggyF:它确实有效。任何想法,为什么这种方式的作品,而不是其他? – denim69 2010-07-26 01:02:50

回答

14

问题不在于生成机器;问题出在目标机器上。

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

注意,您可以使用:

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

,以避免产生中间未压缩的文件。

+0

1.连字符最后只是一个错字,还是它做了什么? 2.通过这种方法,我得到错误'焦油:存档被压缩。使用-z选项'tar:错误不可恢复:现在退出'。如果我添加'-z',它会给我'tar:-z:无法打开:没有这样的文件或目录。 – lindhe 2013-06-29 21:05:29

+0

(1)最后的连字符指定输入文件是标准输入('-f -')。 (2)你可能有一个双重压缩的文件,尽管它不太可能。你可以试试'gunzip hello-0.2.tar.gz',然后使用'file hello-0.2.tar'来查看它认为你有什么文件类型。你使用的是哪个版本的'tar',这意味着压缩文件被压缩,但是不会解压缩它?如果你使用'tar -xzf -',你可能没问题。如果你使用'tar -xf -z',那么你告诉'tar'从中提取的文件是'-z'。 – 2013-06-29 21:20:27

4

实际上,如果您从下载的服务器应用另一轮GZip,并且您用于下载文件的客户端不读取/尊重HTTP标头并存储HTTP有效负载,就像在网络上一样。

虽然该文件似乎只有扩展名.tar.gz它实际上是.tar.gz.gz。一旦文件获得扩展名.tar后,运行gunzip后,只是仍然运行tar命令tar xf hello-0.2.tar识别GZip格式并在提取之前通过gunzip再次隐式运行该文件。

您可以通过运行head hello-02.tar.gzhead hello-02.tar进行检查。 GZip是一种非常强大的二进制格式,而tar是相当人性化的。如果.tar文件出现“太二进制”,那么您的手上就会有一个双重编码的文件。

+1

准确地说我的问题。非常感谢 :) – franzlorenzon 2014-06-04 10:17:26