tar:這看起來不像 tar 檔案

tar:這看起來不像 tar 檔案

我分割了一個巨大的資料夾:

$ tar cvpf - somedir | split -b 50000m

…然後我將分割的檔案傳輸到另一台伺服器並合併它:

$ cat x* > somedir.tar.gz

但是當我嘗試提取文件時,它顯示錯誤:

$ tar xvf somedir.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Error exit delayed from previous errors

如何將其再次傳輸/解壓縮到資料夾中?謝謝

答案1

  1. 您還沒有壓縮,所以不要命名目標檔案somedir.tar.gz- 呼叫它somedir.tar
    • 這與你的問題並不真正相關——tar xvf不過應該有效
  2. 重新檢查您的傳輸(特別是透過 FTP)是二進位傳輸(而不是文字傳輸)
  3. 最後檢查檔案是否確實正確傳輸
    • 為此,您可以檢查來源端和目標端檔案的大小
    • 或者更好的是,匹配雙方的 MD5 和(這也將檢查第 2 點)

如果您已經檢查了上述幾點並且兩端的 MD5 和都匹配,那麼您應該先嘗試檢查您的拆分。那麼,join 和 tar-tf 在來源機器上是否有效?

如果您的somedir目錄非常大,請嘗試使用小目錄的工作流程。
用於tar cvpf首先獲取一個簡單的 tarball,在重新加入後進行拆分和測試。
現在,像以前一樣將分割複製到目標計算機,並在重新加入後進行測試。
這應該可以加快定位問題的速度。

答案2

不要命名您的串聯 tarball somefile.tar.gz,因為它是不是壓縮的。為了避免混淆tar壓縮自動檢測,您確實需要為它命名somefile.tar

引用tar資訊手冊:

格式識別演算法基於“簽名”,即檔案開頭的特殊位元組序列[原文如此],特定於某些壓縮格式。如果這種方法失敗,「tar」會回退到使用存檔名稱後綴來確定其格式...

因此,可能發生的情況是,您的 tarball 不以任何已知壓縮方法的簽名開頭,因此請tar改用檔案名稱來確定壓縮。在您的情況下,名稱以 結尾.gz,因此它假定gzip壓縮。這會導致您收到錯誤,因為檔案實際上並未壓縮。

tl;dr:使用後綴命名 tarball .tar,而不是.tar.gz.

相關內容