web-dev-qa-db-ja.com

ファイルが破損しているかどうかを確認するにはどうすればよいですか?

ファイルが破損しているかどうかを確認する一般的な解決策はありますか?たとえば、ビデオファイルが不良であるか、圧縮ファイルが破損しているかなどです。

13
LanceBaynes

いいえ、一般的な解決策はありません。ファイルが破損しているかどうかを確認する唯一の方法は、ファイルを読み取ってみることです。その特定のフォーマットの読み方を知っているソフトウェアだけがそれを行うことができます。

あなたができることは、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

しかし、ケースステートメントを記入するためにやらなければならないことがたくさんあります。

誰かがそのようなスクリプト(またはプログラム)を既に書いた可能性がありますが、私は知りません。

10
Tom Anderson

ある時点でファイルが良好であることがわかっている場合は、そのファイルのチェックサムを作成し、後でそれを比較して、ファイルが完全であることを確認できます。これは、メディア間またはネットワーク間でファイルを転送する前に役立ちます。

ファイルの良好な状態がわからない場合、普遍的な方法や破損のチェックはありません。どちらの場合も特定のファイル形式のみが、何が破損しているか、何が破損していないかを判別します。

14
Caleb

たまたまZFSを使用している場合は、ファイルを読み取ることができ、ファイルが破損していないことが保証されているか、読み取りエラーが発生しています。

編集賢明なコメントの後、これが私の答えの明確化です:

ZFSは、サイレントデータ破損から保護および検出できます。例: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 もちろん、その時点でファイルがすでに破損している場合は最初に書き込まれ、ファイルシステムで実行できることは何もありません。

ファイルの転送中に発生する破損から保護するために、通常の汎用技術はmd5sumまたは同様のハッシュです。

3
jlliagre