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


25

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

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

回答:


33

場合はtar、その入力で発見エラーがそれがされますexit(3)ゼロ以外の終了値が¹します。これは、ほとんどのtar実装で、アーカイブコンテンツをでリストするときにも行われ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

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


1
おそらく実際には見たくないので、おそらくtar出力をにリダイレクトしたいと思うでしょう/dev/null
ケビン

1
すべてのtar実装がすべてのエラーを検出または報告するわけではありませんtbsdtar使用できませんtar xOf file.tar > /dev/null)。すべてのtar実装が終了ステータス2で終了するわけではありませんstar(255)ot bsdtar(1)はそうではありませんが、重要なのはここで終了ステータスがゼロでないことです。
ステファンシャゼル

1
それに応じて投稿を編集しました。exit(2)私は、適切なマニュアルページではなく、(私は»非ゼロを持っていた理由です«明示的に以下の文章で述べた)正確な終了値に係るました。これに注釈を付けました(そしてセクションを正しいものに変更しました-.-)。
アンドレアスヴィーゼ

あなたの答えはリストと抽出の機能についてのみです、私がエディタでtarアーカイブを開き、あなたのソリューションがどんな種類のエラーもキャッチしない何かを変更した場合...ごめんなさい
THESorcerer

0

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

上記のコメントで指摘したように、tarには文字通り内部CRCがなく、比較用語があります。したがって、エディターでtarアーカイブを変更すると、リストと抽出はエラーなしで完璧に動作しますが、破損したデータを抽出します

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

他のプログラム(gzip、bzip2など)でも圧縮されない非常にまれなtarアーカイブがあります。そのため、そのプログラムにはテストソリューションがあり、それらを圧縮しない人はちょっと不自由です。

私の個人的な問題のために、私はそれを抽出した後、すべてのファイルのCRCを含むmd5sumファイルを見つけました(ネット上にarhive tarを入れて圧縮したくない人でも、彼はまだ検証可能)


-5

次の引数をに渡すことで実行できますtar

$ tar -cvzf test.tar test_file

2
多くの場合、1行の回答はあまり役に立ちません。投稿を拡大して、ソリューションをサポートするソース資料(ドキュメントなど)を含めることを検討してください。
HalosGhost 14

6
-cvia -f( 'test.tar')という名前のファイルを作成します。-zアーカイブをgzipします。-v冗長にします。これは正確な解決策ではないと確信しています。
EpicVoyage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.