Command-Line

通過雜湊查找文件

  • January 25, 2017

我在一個目錄 (d1) 中有一個文件 x1,我不確定同一個文件是否已經複製 (x2) 在另一個目錄 (d2) 中(但由應用程序自動重命名)。

我可以檢查目錄 d1 中文件 x1 的雜湊值是否等於目錄 d2 中存在的某個文件 x2 的雜湊值?

這是一個很好的方法,但是如果您只計算具有正確大小的文件的雜湊值,搜尋會快很多。使用 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

要在目錄中查找具有已知 MD5 摘要的文件(使用bashksh93):

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.

引用自:https://unix.stackexchange.com/questions/339491