はじめに
ディレクトリのコピーが正常終了したかどうかを、ファイルのダイジェストを元に確認したかった。 コマンドの組み立てに、いくらかの調べものと試行錯誤をしたので、メモしておく、 結果的に、コマンドは以下に落ち着いた。
$ find -type f -print0 | sort -z | xargs -0 sha1sum
ハッシュ関数
ハッシュ関数はsha1sumを利用した。 md5sumでもsha256sumでもよかったが、sha256sumだと実行時間が体感でsha1sumの倍ぐらいあったということで、sha1sumにしておいた。
執筆時点で、ファイル破損の検出にどのハッシュ関数を使うのがスタンダードなのかはよく分からない。 参考までに、CentOSのダウンロードサイトではsha1sumとsha256sumの計算結果がアップロードされていた。 また、Ubuntuのダウンロードサイトではmd5sum、sha1sum、sha256sumの計算結果がアップロードされていた。
セパレータ
xargsで空白および記号を含むファイル名を正しく取り扱えるように、データ(ここではファイルのパス)の区切りを空白や改行ではなく、NUL (\0)にする。 パイプによる連結を想定しているコマンドは、セパレータをNULにするオプションを備えているものが多いように思う。 ここで利用しているコマンドとオプションは以下。
コマンド | オプション |
---|---|
find | -print0 |
sort | -z |
xargs | -0 |