2010-07-25 108 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