我分割了一个巨大的文件夹:
$ 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
。