При попытке извлечь файл tar.gz в терминале Ubuntu произошла ошибка в последнем предложении: tar: одиночный нулевой блок в 343398
, каково решение этой проблемы ???
То же самое произошло со мной, потому что я пропустил как stdout , так и stderr через канал, который не разделяет stderr и stdout (терминальная сессия Android ADB).
Таким образом, некоторые сообщения об ошибках попадают в поток. Это была неисправная команда:
Неправильная команда, оболочка adb просто объединяет 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, как эта быстрая потоковая передача tar через ssh, если вы забыли перенаправить stderr в / dev / null:
ssh user@host tar -czf /some/remote/path 2\>/dev/null > /local/path/to/file.tar.gz
Это зависит от того, происходит ли это со всеми tar.gz
файлами или только с этим. Этот конкретный файл может быть поврежден и поэтому не будет открываться должным образом. Если вы используете tar для распаковки, вам нужно использовать опцию z
, так как это необходимо при архивировании архива: 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>
. Проблема подробно описана здесь , здесь .
На днях я получил эту ошибку при попытке распаковать архив, который не был сжат с помощью gzip. Источник файла был мне неизвестен, но я подумал, что создатель может использовать cat
, чтобы объединить несколько таров в один. Это привело к тому, что нулевой маркер конца файла был прочитан утилитой tar
в середине объединенного архива, что привело к отображению ошибки «Одинокий нулевой блок».
Если это так, то параметр - ignore-zeros
или -i
может помочь подавить эти ошибки. См. man tar
или по этой ссылке в качестве справочной информации.