ファイル群をコピーした際に、正常にコピーされたか確かめたいことがある。そういう場合に使えるコマンドをメモしておく。
まず、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
でチェックする方法もあるかもしれない。その辺は好みで。