Answers:
不要依赖MD5的总和。
MD5总和不是检查重复项的可靠方法,它们只是检查差异的一种方法。
使用MD5 查找可能的 候选副本,然后对共享MD5的每对
看到我被那些天真的方法用来复制文件身份的人所打败,如果您将完全依赖哈希算法,出于善意的考虑,请使用诸如SHA256或SHA512之类的更强硬的东西,至少可以降低以下几率:通过检查更多位来达到合理的程度。MD5在碰撞条件下非常弱。
我还建议人们阅读此处标题为“文件检查”的邮件列表:http : //london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html
如果您说“ MD5可以唯一地唯一标识所有文件”,则说明存在逻辑错误。
给定一个值范围,长度从40,000字节到100,000,000,000字节不等,该范围内可用的组合总数大大超过了MD5表示的可能值的数量,仅占128位长度。
仅用2 ^ 128个组合表示2 ^ 100,000,000,000个组合?我认为不太可能。
清除重复项的最简单方法和最快方法如下。
Fdupes做到了。并且您应该使用使用相同条件的软件。
这是在安装了Cygwin的Unix操作系统(包括Linux)或Windows上的一种衬板:
find . -type f -print0 | xargs -0 shasum | sort |
perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
unlink $file if $sig eq $prev; $prev = $sig'
如果您知道没有故意创建的冲突(可以比发现一个自然发生的md5冲突更好的机会赢得10个主要彩票,则可以使用md5sum(速度快50%))。
如果要查看所有的小样,而不是删除它们,只需将其更改为unlink $file
即可print $file, "\n"
。
要在Windows上删除重复的图像,请查看DupliFinder。 它可以按照各种标准(例如名称,大小和实际图像信息)比较图片。
有关删除重复文件的其他工具,请参阅此Lifehacker 文章。
代替DupliFinder,请尝试使用分支的项目DeadRinger。我们已经修复了原始项目中的大量错误,添加了许多新功能,并显着提高了性能。