Odpowiedzi:
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 .
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ć 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.
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..