ubuntuターミナルでtar.gzファイルを抽出しようとしたときに、最後の文がここにあるため、エラーが発生しました。tar:343398の孤独なゼロブロック
この問題の解決策は何ですか?
すべてのtar.gz
ファイルで発生するか、これだけで発生するかによって異なります。この特定のファイルは破損している可能性があるため、適切に開くことができません。 tarを使用して抽出する場合は、z
オプションを使用する必要があります。これは、アーカイブをgzip圧縮するときに必要になるため、tar xzvf <file.tar.gz>
です。または、gunzip <file.tar.gz>
で抽出することも試してみる価値があります
ファイルが破損しているかどうかを確認するには、gzip -t <file.tar.gz>
;を実行します。このコマンドはファイルのエラーをチェックし、見つかった場合は端末に表示されるはずです。これにより、ファイルが破損しているかどうかがわかります。
ファイルが正常でエラーが再度発生する場合、ファイルの末尾にGNUのようなzero blocks
のペアがない場合に発生するのは、おそらくtarの既知の問題です。タールが期待しています。これに対する解決策は、-i
オプションを追加してzero blocks
を無視することです。したがって、tar ixzvf <file.tar.gz>
を使用してください。問題は こちら で詳細に文書化されています。
Stderrとstdout(Android adbターミナルセッション)を分離しないチャネルにstdout and stderrの両方をパイプしたため、同じことが起こりました。
そのようにして、いくつかのエラーメッセージがストリームに入れられました。これは間違ったコマンドでした:
誤ったコマンド、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
Stderrを/ dev/nullにリダイレクトするのを忘れた場合、sshを介したこのクイックtarストリーミングのように、SSHを介して同様のコマンドを実行すると、同じことが起こります。
ssh user@Host tar -czf /some/remote/path 2\>/dev/null > /local/path/to/file.tar.gz