快速查找目录中的重复文件

capidup的Python项目详细描述


licensePyPi versionPyPi pyversionCodacy BadgeCodacy CoverageBuild Status

快速查找目录中的重复文件。

capidup递归地遍历目录列表中的所有文件,并 标识重复文件。重复文件是完全相同的文件 内容,无论其名称、位置或时间戳。

这个程序设计得很快。它使用智能算法来检测 并对每个文件(即capidup)使用一次传递对重复的文件进行分组 不需要对每个文件进行比较)。

capidup完全支持python 2和python 3。

capidup包是一个实现功能和导出的库 一个API。有一个单独的capidup-cli包提供命令行 公用事业。

用法

使用capidup非常简单:

>>>importcapidup.finddups>>>duplicate_groups,errors=capidup.finddups.find_duplicates_in_dirs(...["/media/sdcard/DCIM","/home/user/photos"]...)>>>forduplicatesinduplicate_groups:...print(duplicates)...['/media/sdcard/DCIM/DSC_1137.JPG','/home/user/photos/Lake001.jpg']['/media/sdcard/DCIM/DSC_1138.JPG','/home/user/photos/Lake002.jpg']['/home/user/photos/Woman.jpg','/home/user/photos/portraits/Janet.jpg']>>>errors[]

这里我们发现/media/sdcard/dcim/dsc_.jpg是 ~/photos/lake001.jpg,dsc_.jpg是lake002.jpg的副本,并且 ~/photos/woman.jpg是photos/raphtures/janet.jpg的副本。

算法

capidup对目录进行爬网并收集文件列表。然后,它需要 三步进近:

  1. 文件按大小分组(不同大小的文件显然必须 不同)。
  2. 在相同大小的文件中,它们进一步按 前几千字节。当然,如果前几个KB不同,则文件 是不同的。
  3. 在具有相同初始md5的文件中,它们最终按md5分组 整个文件。具有相同md5的文件被认为是重复的。

注意事项

假阳性的可能性很小。对于任何给定的文件, 有1/2的几率 其他被错误地检测为重复的随机文件。

原因是两个不同的文件可能具有相同的哈希:这是 称为冲突。capidup为 检测文件是否相等。无法区分案件 如果两个文件都相等,并且恰好生成 相同的MD5哈希。

对于相同大小的两个文件,发生这种情况的几率是accident, 然后,非常低。正常家庭使用,处理电影、音乐、来源 代码或其他文档,可以忽略此问题。

安全性

有一种情况需要注意:比较可能 被恶意攻击者故意操纵。

虽然两个随机文件具有相同的md5哈希值的可能性非常大 低(如上所述),恶意攻击者有可能故意 操作一个文件使其具有与另一个相同的md5。MD5算法不是 防止故意的误解。

例如,在比较程序之类的东西时,这可能会引起关注 安装人员。恶意攻击者可以用恶意软件感染安装程序,并且 以这样的方式操作文件的其余部分,使其仍然具有与 原版的。比较这两个文件,capidup会将它们显示为副本 当他们不在的时候。

未来计划

capidup的未来计划包括使用 不同的散列算法,例如sha1,它的散列大小更大,为160 位,或sha2,它允许散列多达512位,并且没有公开的已知信息 碰撞攻击。sha2目前用于大多数加密目的, 安全是必要的。假阳性,随机或恶意引起的, 几乎不可能。重复检测当然会慢一些, 取决于选择的算法。

对于极端偏执的情况,可能有一个额外的设置 将使用两种不同的哈希算法检查文件。贸易F速度 对于任何正常的用例来说都是不值得的,但是可能是 在那里。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Cassandra DB的javascript查询结果   java定时器任务调度   java在TLS上实现LDAP   为什么在浏览器中滚动会使java小程序闪烁?   未使用轮询器和serviceactivator提取java pubsub消息   java风暴多线程问题   java计算平均成绩   java将字符串添加到另一个类的数组列表中   文件Java路径如何转换为例如InputStream   java更改JComboBox的字体颜色   java inthttp:具有可轮询请求通道的inboundgateway   使用继承在Java中运行swing Base和扩展windows   java ivysettings。xml:添加本地maven路径   java如何将参数自定义视图传递给activity类   java延迟加载无法在Hibernate中使用一对一映射   当文件以“file:/”开头时,Java无法识别该文件   需要java正则表达式帮助,使用反斜杠   片段中的java GWT参数