回答:
いいえ、一般的な解決策はありません。ファイルが破損しているかどうかを確認する唯一の方法は、ファイルを試して読み取ることです。その特定の形式の読み方を知っているソフトウェアだけがそれを行うことができます。
できることはfile
、ファイルの種類を特定するために使用し、その種類を使用してファイルをチェックする適切なプログラムを選択することです。次のようなスクリプトを作成できます。
# /bin/bash -eu
FILENAME=$1
FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
"gzip compressed data") CHECKER="gunzip -t" ;;
# many, many more lines here
*) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac
$CHECKER $FILENAME
しかし、caseステートメントを記入するために多くの作業が必要になります。
誰かが既にそのようなスクリプト(またはプログラム)を書いている可能性はありますが、私はそれを知りません。
grep
、cat
、tar
...)。したがって、ソリューションは非常に肥大化しています。
cat
、またはファイルを純粋に構造化されていないバイトストリームとして扱う他のプログラムを使用して、破損をチェックすることはできません。私のソリューションが肥大化しているとは思わない。
たまたまZFSを使用している場合は、ファイルを読み取ることができ、ファイルが破損していないか、読み取りエラーが発生したことが保証されます。
編集賢明なコメントの後、ここに私の答えの説明があります:
ZFSは、サイレントデータ破損から保護および検出できます。例:http: //www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191もちろん、ファイルが最初に書き込まれたときにすでに破損している場合は、何もありませんファイルシステムができます。
ファイルの送信中に発生する破損から保護するために、通常の汎用技術はmd5sumまたは同様のハッシュです。