尝试在 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
或此链接作为参考。