The --ignore-zeros (-i) option causes tar to ignore blocks of zeros in
the archive. Normally a block of zeros indicates the end of the archive,
but when reading a damaged archive, or one which was created by cat-ing
several archives together, this option allows tar to read the entire
archive. This option is not on by default because many versions of tar
write garbage after the zeroed blocks.
您可以使用 -i 选项尝试提取以忽略零:
您可以尝试其他版本的 tar:gnu tar、star、bsdtar 等。其中之一可能会更好地处理错误。
您说您的文件都是文本文件,因此您应该能够手动编辑文件并选择每个文件并将其复制/粘贴到新文件中。在每个文件之间寻找 tar 的分隔符,它看起来像一个 ASCII NULL 块,其中嵌入了文件的元数据(名称、权限、时间戳等)。
它并不漂亮,但它会作为最后的手段:
安装“photorec”,它可能包含在您的发行版的“testdisk”包中(两者都可以在这里找到)。
键入
"photorec <foo.tar>"
并按照提示操作(为文件系统选项选择“无 - 非分区媒体”和“其他”)。它应该能够恢复许多文件,尽管您必须手动识别和重命名它们。至少它胜过失去一切。(作为参考,我 tar'ed 了我的 /etc 目录并尝试了这个。即使在一个未损坏的 tar 文件上,它也只得到了 337 个文件中的 225 个,甚至其中一些文件也很糟糕。)一种更暴力的方法是运行
"strings foo.tar > out.txt"
以从文件中恢复文本数据,然后需要对其进行排序并手动将其放回单独的文件中。顺便说一句...关于“恢复损坏的 tar 文件”的 google 产生了几个针对您的问题的工具。