使用 FSlint 仅按文件大小查找重复项?

使用 FSlint 仅按文件大小查找重复项?

我正在尝试使用 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

您没有错过任何有关 FSlint 的内容;它确实支持所有这些比较,但它不允许对它们进行配置——它始终使用所有这些信息来消除重复。

findup本身就是一个shell脚本,每次比较都是分开的。可选块已被指示,因此您可以将它们注释掉以跳过您不需要的测试。

关于 jdupes,我看到你提交了一份问题关于哈希大小;在那里继续讨论比在这里解决更有成效。

答案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 个字节还不够,还会产生错误的重复项

随意添加条件,例如散列文件的开始、结束、中间。自己编写脚本并不太难。

然而,在您阅读全部内容之前,它可能是也可能不是重复的。没有什么启发式方法可以包罗万象,因为差异可能出现在任何地方。因此,如果你走捷径,你总是理所当然地接受错误的重复。

检查重复项的唯一更快的方法是使其成为硬链接。如果它是同一个文件,您无需再检查大小或内容。

相关内容