あるディレクトリ(d1)にx1ファイルがあり、同じファイルが別のディレクトリ(d2)にコピー(x2)されているかどうかはわかりません(ただし、アプリケーションは自動的に名前が変更されました)。
d1ディレクトリのx1ファイルのハッシュがd2ディレクトリの一部のファイルx2のハッシュと同じであることを確認できますか?
答え1
これは良いアプローチですが、正しいサイズのファイルのハッシュだけを計算すると、検索速度がはるかに高速になります。 GNU/BusyBox ユーティリティの使用:
wanted_size=$(stat -c %s d1/x1)
wanted_hash=$(sha256sum <d1/x1)
find d2 -type f -size "${wanted_size}c" -execdir sh -c 'test "$(sha256sum <"$0")" = "$1"' {} "$wanted_hash" \; -print
答え2
既知のMD5ダイジェストを含むディレクトリ内のファイルを検索する(bash
または使用ksh93
):
x1digest="$( md5sum d1/x1 | cut -d ' ' -f 1 )"
for x2 in d2/*; do
if [[ ! -f "$fpath" ]]; then
continue
fi
x2digest="$( md5sum "$fpath" | cut -d ' ' -f 1 )"
if [[ "$x2digest" == "$x1digest" ]]; then
printf '"%s" has the same hash as d1/x1\n' "$fpath"
fi
done
BSDシステムmd5sum filename | cut -d ' ' -f 1
ではmd5 -q filename
。