".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