从计算机中删除重复图像文件的最佳方法是什么?

从计算机中删除重复图像文件的最佳方法是什么?

我的 Windows 计算机上有很多重复的图像文件,位于不同的子文件夹中,并且文件名也不同。

您会推荐什么 Python 脚本或免费软件程序来删除重复项?

(我读了类似的问题,但那里的发帖人询问的是具有不同文件大小的视觉重复。我的是具有不同文件名的完全重复。)

答案1

不要依赖 MD5 总数。

MD5 总和不是检查重复的可靠方法,它们只是检查差异的一种方法。

使用 MD5 查找可能的 候选人重复项,然后对每对共享 MD5

  1. 打开两个文件
  2. 在这些文件中向前搜索,直到有一个文件不同。

看到我被那些采取幼稚方法归档重复身份的人否决了,如果你要依赖完全在哈希算法上,看在上帝的份上,使用更强大的算法,如 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 种组合?我认为不太可能。

最不幼稚的方法

删除重复项的最简单且最快的方法如下。

  1. 按尺寸:不同大小的文件不能相同。这花费的时间很少,因为甚至不需要打开文件。
  2. 通过 MD5:具有不同 MD5/Sha 值的文件不可能相同。这会花费更长的时间,因为它必须读取文件中的所有字节并对其进行数学运算,但它可以加快多次比较的速度。
  3. 缺乏上述差异:对文件进行逐字节比较。这是一项执行起来很慢的测试,这就是为什么要等到考虑完所有其他排除因素后再进行。

重复项这样做。你应该使用采用相同标准的软件。

答案2

在安装了 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'

如果您知道没有故意制造的碰撞,则可以使用 md5sum(速度大约快 50%)(您赢得 10 次大奖的机会比找到一次自然发生的 md5 碰撞的机会更大。)

如果您想要查看所有重复项而不是删除它们,只需将部分更改unlink $fileprint $file, "\n"

答案3

我在 Unix 系统上使用过fdupes(用 C 编写)和freedups(Perl),它们在 Windows 上可能也能用;还有类似的据称可以在 Windows 上运行dupmergeliten(用 Python 编写)等等。

答案4

一个选择是复制者

DupKiller 是搜索和删除计算机上重复或相似文件的最快、最强大的工具之一。其搜索机制中内置的复杂算法可实现高结果 — 快速文件搜索。大量选项允许灵活地自定义搜索。

在此处输入图片描述

相关内容