我有一个在 Linux 上创建的未压缩的 TAR 文件。
如果我使用less
它来查看文件,我可以看到所有数据;主要是代码文件。但是,如果我尝试解压缩它,我会收到以下错误:
tar:无法识别的存档格式错误。
如果我这样做,file thetarfile.tar
我就会得到类型数据。
我怎样才能提取该文件?
答案1
您可以尝试使用该实用程序保存仍然可以保存的 内容cpio
(
GNU cpio 将文件复制到 cpio 或 tar 档案中或从中复制出...)
下面的命令应该完成提取文件和重新创建目录树的任务:
cpio -ivd -H tar < myfile.tar
Ps> 在安全的地方(目录)工作。
详细信息:
-i
或--extract
运行复制模式。-d
或--make-directories
在需要的地方创建前导目录。
(默认情况下它不会创建目录)-v
或者--verbose
像经常写更多信息一样,这次它列出了已处理的文件。-H format
或--format=format
使用存档格式格式。
简历:几乎一个完整的tar
文件。它没有标题中的魔法数字,它有最终签名。此外,您可以使用文本文件读取该部分(当您使用较少时),因此无需压缩。它已损坏。为什么(如果是因为服务器没有完成工作或传输时损坏了某些部分)是次要的。如果您可以再次生成它就更好了。如果没有的话,您可以尝试上面或下面的方法...
参考资料:
您可以在站点太平洋保险协会或mac 网站太
满了选项列表
备择方案:
下列的这个帖子 并下载此perl 脚本,之后你用 解压缩
bunzip2 find_tar_headers.pl.bz2
它就可以使用它了:perl find_tar_headers.pl yourfile.tar
它会回答一系列的行
你的文件.tar:12345:dir/subdir/你的文件:126344
你的文件.tar:20578:dir/subdir/你的文件:123453 ...在本例中,读取第一个数字12345接下来的操作应该可以解决你的问题
tail -c +12345 yourfile.tar > extracted_tail_yourfile.tar tar xf extracted_tail_yourfile.tar
75 73 74 61 72 00 30 30
或者75 73 74 61 72 20 20 00
是 tar 文件的签名。(根据此列表)。您可以使用十六进制编辑器或使用将其中一个写入文件副本的偏移量 257 处,dd
它将被识别为tar
文件。也许您也可以提取一些东西, 但它仍然会被破坏:如果能再次生成就更好了。
答案2
仅仅因为文件具有 tar 或 tgz 后缀并不意味着它是 tar 文件。
您可以使用文件命令检查文件头中的魔法数字:
file myfile
它会报告文件的类型。它可能是 zip 格式、bzip 格式,甚至是 cpio。
如果它返回“数据”,那么它可能不是一个已知的档案,或者根本不是一个档案。
答案3
有很多原因都可能导致 TAR 被视为损坏。如果它是一个部分完成的档案,那么它就不完整,但至少在某种程度上是非 TAR。如果file thetarfile.tar
返回“数据”,那么它可能是一个压缩档案?
一个想法是看看是否存在某种回车符/换行符问题。这可能可以通过以下方法解决dos2unix
,Linux/Unix 中的一个实用程序,可将文件回车符/换行符转换为 Linux 兼容的换行符。要使用它,只需执行以下操作即可。
首先,安装dos2unix
。不清楚你试图在什么系统上执行此操作,但在 Ubuntu 中,你可以运行此aptitude
命令从存储库安装它:
sudo aptitude install dos2unix
现在创建原始文件的副本.tar
以进行测试,如下所示:
cp tarfile.tar tarfile_TEST.tar
现在dos2unix
只需运行此命令:
dos2unix tarfile_TEST.tar
输出结果如下:
dos2unix: converting file tarfile_TEST.tar to UNIX format ...
然后尝试像这样解压缩该 TAR 文件的内容:
tar -xf tarfile_TEST.tar
现在如果你需要dos2unix
在 Mac OS X 中安装,这里有关于如何处理这个问题的提示。但这一切都只是我个人的直觉;不要太深入地探究这个理论兔子洞,除非它能证明自己是一个真正的解决方案。