回答:
場合は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
。
tar
実装がすべてのエラーを検出または報告するわけではありませんt
(bsdtar
使用できませんtar xOf file.tar > /dev/null
)。すべてのtar
実装が終了ステータス2で終了するわけではありませんstar
(255)ot bsdtar
(1)はそうではありませんが、重要なのはここで終了ステータスがゼロでないことです。
exit(2)
私は、適切なマニュアルページではなく、(私は»非ゼロを持っていた理由です«明示的に以下の文章で述べた)正確な終了値に係るました。これに注釈を付けました(そしてセクションを正しいものに変更しました-.-)。
申し訳ありませんが、できません。tarにはテスト機能がないようです(たとえば、* nixを忘れてwinrarでテストしようとすると、結果は「このタイプのアーカイブではコマンドはサポートされません」)
上記のコメントで指摘したように、tarには文字通り内部CRCがなく、比較用語があります。したがって、エディターでtarアーカイブを変更すると、リストと抽出はエラーなしで完璧に動作しますが、破損したデータを抽出します
結論として、私はここで解決策を期待していますが、幸いなことに2つの良いニュースがあります。
他のプログラム(gzip、bzip2など)でも圧縮されない非常にまれなtarアーカイブがあります。そのため、そのプログラムにはテストソリューションがあり、それらを圧縮しない人はちょっと不自由です。
私の個人的な問題のために、私はそれを抽出した後、すべてのファイルのCRCを含むmd5sumファイルを見つけました(ネット上にarhive tarを入れて圧縮したくない人でも、彼はまだ検証可能)
次の引数をに渡すことで実行できますtar
。
$ tar -cvzf test.tar test_file
-c
via -f
( 'test.tar')という名前のファイルを作成します。-z
アーカイブをgzipします。-v
冗長にします。これは正確な解決策ではないと確信しています。
tar
出力をにリダイレクトしたいと思うでしょう/dev/null
。