Odpowiedzi:
To zależy, czy dzieje się tak ze wszystkimi tar.gz
plikami, 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 z
opcji, 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 blocks
na końcu, jak tego oczekuje GNU tar. Rozwiązaniem tego jest dodanie -i
opcji ignorowania zero blocks
. Więc skorzystaj tar ixzvf <file.tar.gz>
Problem został szczegółowo opisany tutaj .
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
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ć cat
do połączenia kilku smół w jeden. Spowodowało to, że znacznik zera końca pliku został odczytany przez tar
narzędzie w środku połączonego archiwum, co spowodowało wyświetlenie błędu „Samotny blok zerowy”.
W takim przypadku --ignore-zeros
lub -i
opcja może pomóc w wyeliminowaniu tych błędów. Proszę zobaczyć man tar
lub ten link jako odniesienie.
RequestTTY yes
w swoim ssh_config. Można jawnie wyłączyć za pomocą-T Disable pseudo-tty allocation.
Dla mnie błąd byłtar: Skipping to next header
pierwotnie, blok pojedynczego zera wystąpił, gdy próbowałem--posix
..