Bashでtarファイルの整合性をテストする

Bashでtarファイルの整合性をテストする

".tar"ファイルを生成するbashスクリプトがあります。ファイルが生成された後に整合性をテストし、整合性が悪い場合は、rootユーザーに電子メールを送信したいと思います。

tar -tf /root/archive.tarファイルの整合性を確認するにはこのコマンドを使用する必要がありますが、bash ifステートメントでそれを実装してエラーを確認するにはどうすればよいですか?

答え1

tar入力でエラーが検出されると、ゼロ以外の終了exit(3)値があります。ほとんどのtar実装では、これは.listを使用してアーカイブコンテンツを一覧表示するときにも行われますt。したがって、終了値を調べてtar問題が発生したかどうかを確認できます。

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

tarすべてのエラーが見つからない場合tでも、アーカイブを抽出してstdoutリダイレクトできます。この方法は遅いですが、より安定した方法です。stdout/dev/null

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

1この記号は、実際の呼び出しではなくマンページを表します。バラよりman 3 exit

答え2

申し訳ありませんが、できません。 tarにはテスト機能がないようです。たとえば、* nixを忘れてwinrarでテストしようとすると、結果は次のようになります。 "このコマンドはこのタイプのアーカイブをサポートしません。"

上記のコメントでは、tarには実際に比較のための内部CRCが不足しているため、エディタを使用してtarアーカイブを変更すると、リストと抽出はエラーなく完全に機能する可能性がありますが、破損したデータが抽出されることを指摘しました。

とにかく解決策を見つけるためにここに来ましたが、解決策はありません。幸いなことに、2つの良いニュースがあります。

gzip、bzip2などのような他のプログラムに圧縮されていない非常にまれなtarアーカイブがあるので、そのプログラムにはテストソリューションがあり、圧縮しない人は何らかの不都合な、本当に不都合なものです。

私の個人的な問題の場合、幸運にも解凍した後、すべてのファイルのCRCを含むmd5sumファイルが見つかりました。確認するため)

答え3

次のパラメータを渡すことでこれを行うことができますtar

$ tar -cvzf test.tar test_file

関連情報