通过哈希查找文件

通过哈希查找文件

我在一个目录 (d1) 中有一个文件 x1,我不确定是否已将同一文件复制 (x2) 到另一个目录 (d2)(但由应用程序自动重命名)。

我可以检查目录 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 摘要的文件(使用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.

相关内容