小ネタです。
例えばsplit
コマンドなどで分割したファイルをダウンロードした際に、一つ一つMD5の値を確認するのはダルいですよね。md5sum
コマンドでは、予め検証したいファイルのパスとそのMD5の値をペアで記述されたファイルを用意しておくと、一発で確認することでができます。
定義ファイルは以下のようにMD5値と、ファイルのパスを半角スペースなどで区切って書きます。
$ cat MD5SUM f64062373f79e3fdabed57f6aec6d54d data/foo.zip.1 89063c79371e866afe627ddc221d3a9e data/foo.zip.2 993e1252af0e1fbd2435dcadd2a9fead data/foo.zip.3
あとは-c
オプションでこの定義ファイルを渡せば自動的にチェックしてくれます。
$ md5sum -c MD5SUM
data/foo.zip.1: OK
data/foo.zip.2: OK
data/foo.zip.3: OK
エラーパターン
エラーになる場合は次のような表示になります。
ファイルが存在しない。
md5sum: stat 'data/bar.zip': No such file or directory
MD5チェックサムの値が異なる。
data/foo.zip.2: FAILED
定義ファイルにかかれているMD5チェックサムの長さが異なる。以下は1byte分削除した際のメッセージ。こちらはエラーではなく警告、そのため処理は続行されます。
Warning: Hash size is wrong, maybe you want to use 'sha1sum' or 'ripemd160sum'
BASHで結果をチェック
シェルスクリプトでmd5チェックサムの結果がすべて正しかった場合にのみ処理を継続したい場合は、以下のように記述します。
#!/bin/bash if md5sum -c MD5SUM | grep -Ev 'OK$' > /dev/null; then echo '[ERROR] 正常に保存されていないファイルがあります' exit 1 else echo 'OK' fi
grep
コマンドでOKではない行が存在すればエラーというお手軽ロジックです。