tar: Blok samotnego zera w 343398

10

podczas próby wyodrębnienia pliku tar.gz w terminalu ubuntu wystąpił błąd w ostatnim zdaniu tutaj: tar: blok samotnego zera w 343398

jakie jest rozwiązanie tego problemu?

wael
źródło

Odpowiedzi:

18

To zależy, czy dzieje się tak ze wszystkimi tar.gzplikami, czy tylko tym. Ten konkretny plik może być uszkodzony i dlatego nie można go poprawnie otworzyć. W przypadku korzystania z tar do wyciągu, trzeba korzystać z zopcji, jak to jest konieczne, gdy archiwum jest skompresowane: tar xzvf <file.tar.gz>. Alternatywnie warto też spróbować go wyodrębnićgunzip <file.tar.gz>

Aby dowiedzieć się, czy plik jest uszkodzony, uruchom gzip -t <file.tar.gz>; to polecenie sprawdzi plik pod kątem błędów, a jeśli zostaną znalezione, powinny pojawić się w terminalu. Powinno to powiedzieć, czy plik jest uszkodzony.

Jeśli plik jest poprawny, a błąd wystąpił ponownie, oznacza to, że prawdopodobnie jest to znany problem z tar, który występuje, gdy plik nie ma pary zero blocksna końcu, jak tego oczekuje GNU tar. Rozwiązaniem tego jest dodanie -iopcji ignorowania zero blocks. Więc skorzystaj tar ixzvf <file.tar.gz>Problem został szczegółowo opisany tutaj .


źródło
1

To samo stało się ze mną, ponieważ przepuściłem stdout i stderr przez kanał, który nie rozdziela stderr i stdout (sesja terminalu adb na Androidzie).

W ten sposób niektóre komunikaty o błędach trafiły do ​​strumienia. To było błędne polecenie:

  • Błędne polecenie, powłoka adb po prostu lokalnie łączy stderr i stdout => śmieci! :
    adb shell tar -cf - /some/dir \| uuencode bla | uudecode -o - > backup.tar

  • Naprawiono polecenie:
    adb shell tar -cf - /some/dir 2>/dev/null\| uuencode bla | uudecode -o - > backup.tar

To samo stanie się, jeśli wykonasz podobne polecenie przez SSH, takie jak szybkie przesyłanie strumieniowe tar przez ssh, jeśli zapomnisz przekierować stderr do / dev / null:

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

ce4
źródło
1
Dobry chwyt Dzieje się tak również , jeśli ustawisz RequestTTY yesw swoim ssh_config. Można jawnie wyłączyć za pomocą -T Disable pseudo-tty allocation.Dla mnie błąd był tar: Skipping to next headerpierwotnie, blok pojedynczego zera wystąpił, gdy próbowałem --posix..
eMPee584
0

Ten błąd dostałem pewnego dnia podczas próby rozpakowania archiwum, które nie zostało skompresowane. Źródło pliku było mi nieznane, ale pomyślałem, że twórca może użyć catdo połączenia kilku smół w jeden. Spowodowało to, że znacznik zera końca pliku został odczytany przez tarnarzędzie w środku połączonego archiwum, co spowodowało wyświetlenie błędu „Samotny blok zerowy”.

W takim przypadku --ignore-zeroslub -iopcja może pomóc w wyeliminowaniu tych błędów. Proszę zobaczyć man tarlub ten link jako odniesienie.

Yerden
źródło