我分割了一個巨大的資料夾:
$ 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
- 您還沒有壓縮,所以不要命名目標檔案
somedir.tar.gz
- 呼叫它somedir.tar
- 這與你的問題並不真正相關——
tar xvf
不過應該有效
- 這與你的問題並不真正相關——
- 重新檢查您的傳輸(特別是透過 FTP)是二進位傳輸(而不是文字傳輸)
- 最後檢查檔案是否確實正確傳輸
- 為此,您可以檢查來源端和目標端檔案的大小
- 或者更好的是,匹配雙方的 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
.