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

相关内容