web-dev-qa-db-ja.com

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

「.tar」ファイルを作成するbashスクリプトがあります。ファイルが作成されたら、整合性をテストし、整合性が悪い場合はルートユーザーにメールを送信します。

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

28
Chris

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

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

tartですべてのエラーを見つけられない場合でも、アーカイブをstdoutに抽出し、stdout/dev/nullにリダイレクトできます。速度は遅くなりますが、信頼性が高くなります。

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

¹この表記は、実際の呼び出しではなく、マンページを示します。 man 3 exit を参照してください。

38
Andreas Wiese

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

上記のコメントで私が指摘した方法では、tarは文字どおり内部CRCに比較期間がないため、エディターでtarアーカイブを変更すると、リストと抽出はエラーなく完璧に機能しますが、破損したデータを抽出します。

結論として、私はここで解決策を望んでいますが、解決策はありません。幸いにも2つの良いニュースがあります。

gzip、bzip2などのような別のプログラムで圧縮されていない非常にまれなtarアーカイブが存在する)したがって、そのプログラムにはテストソリューションがあり、圧縮しない人はちょっと不自由です、本当にラメ

私の個人的な問題については、幸運です、それを抽出した後、内部にすべてのファイルのCRCがあるmd5sumファイルを見つけました(ネットにarhive tarを配置し、それを圧縮したくない人でも、彼はまだ検証可能)

1
THESorcerer