md5 sum (fdupes) vs sha256sum - 为什么结果不同 - ubuntu 服务器

md5 sum (fdupes) vs sha256sum - 为什么结果不同 - ubuntu 服务器

我有一个目录结构,我知道其中包含很多重复文件。 (目录树有 67K 个文件,其中大约有 8K 个重复项)。当然,重复项的字节大小和内容相同,但文件名完全不同。当使用 fdupes /dir/path -rm 时,我只得到 125 个重复项。但是,如果我将整个目录树内容的 SHA256 转储到文本文件中:

    input_dir=$1
    IFS=$'\n'
    for i in $(find ${input_dir} -type f); do
       sha256sum "${i}" >> dupfilenames.txt
    done

然后 grep 查找重复的 SHA256 签名:

  cat dupfilenames.txt | cut -d " " -f1 | sort | uniq | while read sha; do
  count=`cat dupfilenames.txt | grep ${sha} | wc -l`
  if [ $count -gt 1 ]; then
      echo "${sha}:${count}"
      IFS=$'\n'
      files=( $(cat dupfilenames.txt | grep ${sha} | cut -d " " -f3) );
      orig_size=`stat -c%s "${files[0]}"`
      for i in "${files[@]:1}"; do
       if [ $orig_size -eq `stat -c%s "${i}"` ]; then
          echo "Origsize:${orig_size} vs. `stat -c%s "${i}"` '${i}'"
       else
          echo "SHA matches but filesize doesn't for '${i}'!!!"
       fi
      done
    fi
  done

代码执行后,我得到了大约 8000 个重复签名。

这是由于 fdupes 使用的 MD5 签名不足造成的吗? (我知道我有超过 125 个文件,它们的内容完全相同,更不用说逐字节的文件大小了。

答案1

好吧,我想通了 - 如果没有给出显式开关( -H ), fdupes 将忽略硬链接文件。这就是重复文件数量差异的原因。当使用 -H 开关运行时,重复项的数量与我上面引用的代码产生的相同。

相关内容