tar:343398 处有一个单独的零块

tar:343398 处有一个单独的零块

尝试在 ubuntu 终端中提取 tar.gz 文件时,最后一句出现错误:tar:343398 处有一个单独的零块

这个问题的解决方案是什么?

答案1

这取决于它是发生在所有tar.gz文件上还是只发生在这个文件上。这个特定的文件可能已损坏,因此无法正常打开。如果使用 tar 进行提取,则需要使用选项z,因为存档使用 gzip 压缩时需要使用该选项:tar xzvf <file.tar.gz>。或者,也可以尝试使用gunzip <file.tar.gz>

要查明文件是否已损坏,请运行gzip -t <file.tar.gz>;此命令将检查文件是否有错误,如果发现任何错误,它们应该出现在终端中。这应该会告诉您文件是否已损坏。

如果文件完好无损,错误再次出现,则意味着这可能是 tar 的已知问题,即文件zero blocks末尾没有一对 ,正如 GNU tar 所期望的那样。解决此问题的方法是添加-i忽略 的选项zero blocks。因此请使用tar ixzvf <file.tar.gz>该问题已记录在案这里详细。

答案2

同样的事情也发生在我身上,因为我通过管道传输了两个 stdout通过不分离 stderr 和 stdout 的通道(android adb 终端会话)传输 stderr。

这样,一些错误消息就会出现在流中。这是错误的命令:

  • 错误的命令,adb shell 仅在本地合并 stderr 和 stdout => 垃圾!:
    adb shell tar -cf - /some/dir \| uuencode bla | uudecode -o - > backup.tar

  • 固定命令:
    adb shell tar -cf - /some/dir 2>/dev/null\| uuencode bla | uudecode -o - > backup.tar

如果您通过 SSH 执行类似的命令(例如通过 ssh 进行的快速 tar 流式传输)并且忘记将 stderr 重定向到 /dev/null,也会发生相同的情况:

ssh user@host tar -czf /some/remote/path 2\>/dev/null > /local/path/to/file.tar.gz

答案3

前几天,我在尝试解压一个未经过 gzip 压缩的档案时遇到了这个错误。我不知道该文件的来源,但我认为创建者可能会将多个 tar 文件合并为一个。这导致实用程序在合并的档案中间cat读取文件末尾的零标记,从而显示“一个单独的零块”错误。tar

如果是这种情况,则--ignore-zeros-i选项可能有助于抑制这些错误。请参阅man tar此链接作为参考。

相关内容