我正在尝试使用 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 个字节还远远不够,并且会产生错误的重复项。(也许命令行选项在这里有用)
您没有错过任何有关 FSlint 的信息。它确实支持所有这些比较,但它不允许配置它们——它一直使用所有这些信息进行重复数据删除。
findup
本身就是一个shell脚本,每次比较都是分开的。指示了可选块,因此您可以将它们注释掉以跳过您不想要的测试。关于 jdupes,我看到您提出了有关哈希大小的问题;在那里继续讨论比在这里讨论更有成效。
您可以
find
像这样复制文件大小:然后用它做任何你喜欢的事情......例如,grep。
它会找到相同大小的东西(无论内容如何)
随意添加条件,如散列开始、结束、文件中间。自己编写脚本并不难。
但是,在您阅读完所有内容之前,它可能也不可能是重复的。没有什么启发式的方法可以捕捉一切,因为任何地方都可能出现差异。所以如果你走捷径,你总是理所当然地接受错误的重复。
检查重复项的唯一更快方法是使其成为硬链接。如果是同一个文件,则无需再检查大小或内容。