我正在尝试使用 fslint 来查找重复项,但它需要永远对整个数 GB 文件进行哈希处理。根据这个网站,我可以通过以下特征进行比较:
特点总结
compare by file size
compare by hardlinks
compare by md5 (first 4k of a file)
compare by md5 (entire file)
compare by sha1 (entire file)
但我在 GUI 或手册页中没有看到这些选项。我在这里缺少什么吗?
编辑:我使用 jdupes 代替命令行:
jdupes -r -T -T --exclude=size-:300m --nohidden
为了完成这项工作,我必须克隆 git 存储库并从源代码构建。 (不幸的是,打包版本已经过时了。)
我还必须编辑源代码来更改每个:
#define PARTIAL_HASH_SIZE 4096
到
#define PARTIAL_HASH_SIZE 1048576
然后它实际上正确匹配了我的文件。我不知道他们为什么这样编码,但仅匹配前 4096 个字节还不够,还会产生错误的重复项。 (也许命令行选项在这里会有用)
答案1
答案2
您可以find
像这样复制文件大小:
find -type f -printf "%s\n" | sort -n | uniq -d
然后做任何你喜欢的事情......例如,grep。
find -type f -printf "%s %p\n" \
| sort -n \
| grep -f <(find -type f -printf "^%s \n" | sort -n | uniq -d)
它会找到相同大小的东西(无论内容如何)
257659 ./b
257659 ./bsort
257764 ./a
257764 ./asort
仅匹配前 4096 个字节还不够,还会产生错误的重复项
随意添加条件,例如散列文件的开始、结束、中间。自己编写脚本并不太难。
然而,在您阅读全部内容之前,它可能是也可能不是重复的。没有什么启发式方法可以包罗万象,因为差异可能出现在任何地方。因此,如果你走捷径,你总是理所当然地接受错误的重复。
检查重复项的唯一更快的方法是使其成为硬链接。如果它是同一个文件,您无需再检查大小或内容。