web-dev-qa-db-ja.com

tar:343398の孤立したゼロブロック

ubuntuターミナルでtar.gzファイルを抽出しようとしたときに、最後の文がここにあるため、エラーが発生しました。tar:343398の孤独なゼロブロック

この問題の解決策は何ですか?

10
wael

すべての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>を使用してください。問題は こちら で詳細に文書化されています。

18
user76204

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

1
ce4