ファイル群をコピーした際に、正常にコピーされたか確かめたいことがある。そういう場合に使えるコマンドをメモしておく。
まず、find コマンドで再帰的に shasum を実行する。結果はファイルに保存しつつ、標準出力にも出す(進行状況をわかりやすくするため)。
$ find . -exec shasum -a 256 '{}' \; | tee file-list.txt
コピー元とコピー先で同様のコマンドを実行し、それぞれハッシュ値一覧のファイルを作る。
find の列挙順はよくわからない(Macの find コマンドは -s で辞書順にソートできるようだ)。コピー元とコピー先で列挙の順番が違うかもしれないので、sort したい。shasum の出力は先にハッシュ値が来て、後にファイル名が来る。sort コマンドに -k オプションを使うと、ファイル名の部分でソートできる。
$ sort -k2 < file-list-src.txt > file-list-src-sorted.txt
$ sort -k2 < file-list-dst.txt > file-list-dst-sorted.txt
あとは diff で比較する。
$ diff file-list-src-sorted.txt file-list-dst-sorted.txt
シェルによっては、ソートと diff をワンライナーで
$ diff <(sort -k2 file-list-src.txt) <(sort -k2 file-list-dst.txt)
と書けるかもしれない(bashとzshではできそう)。
diff で比較する以外に、shasum -c でチェックする方法もあるかもしれない。その辺は好みで。