web-dev-qa-db-ja.com

md5はファイルの最初の512バイトのみをハッシュします

バックグラウンド

古いNASから新しいファイルにファイルを移行しようとしています。データの整合性を検証したいと思います。古いNAS(Debian)はLinuxを使用していますExt3ファイルシステム、新しいもの(FreeNAS)はZFSに基づいていますが、整合性の検証を高速化するために、トライアージュアプローチを使用しようとしています。

  • 最初にすべてのファイルサイズを検証します
  • 次に、md5は各ファイルの最初の512バイトをハッシュします
  • 最後に、md5はファイル全体をハッシュします

最初の2つの手順で明らかに破損したファイルが除外され、ファイルのTB)に対してmd5を一括で実行するよりもはるかに迅速に検出できるという考えです。

質問

ディレクトリ構造のmd5ハッシュを実行し、ファイル名に基づいて出力を並べ替えてLinux NASで確定的な順序を確保するために、bashコマンドを作成しました。

#find somedir -type f -exec md5sum {} \; | sort -k 34;
12e761f96223145aa63f4f48f252d7fb  /somedir/foo.txt
18409feb00b6519c891c751fe2541fdc  /somedir/bar.txt

しかし、各ファイルの最初の512バイトのみをmd5する場合、上記を変更するにはどうすればよいですか?

3
Jimmy1969

ddを使用して、最初の512バイトのみをmd5sumにパイプできます。ただし、これによりmd5sumはファイル名を認識しなくなるため、さらに-をファイル名に再度置き換えます。

find . -type f -exec sh -c "dd if={} bs=512 count=1 2>/dev/null | md5sum | sed s\|-\|{}\|" \; | sort -k 34;
6
techraf