tar: одинокий нулевой блок на 343398
При попытке извлечь файл tar.gz в терминал ubuntu произошла ошибка в последнем предложении: tar: одиночный нулевой блок в 343398
каково решение этой проблемы???
2 ответа
Зависит ли это от всего 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>
Эта проблема подробно описана здесь.
На днях я получил эту ошибку, пытаясь распаковать архив, который не был сжат. Источник файла был мне неизвестен, но я решил, что создатель может использовать
cat
объединить несколько смол в одну. Это привело к тому, что нулевой маркер конца файла был прочитан
tar
в середине объединенного архива, отображая ошибку "Одинокий нулевой блок".
Если это так, то
--ignore-zeros
или
-i
опция может помочь подавить эти ошибки. Пожалуйста, посмотри
man tar
или по этой ссылке в качестве справки.
То же самое произошло со мной, потому что я передавал и 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 [email protected] tar -czf /some/remote/path 2\>/dev/null > /local/path/to/file.tar.gz