在目录中快速查找重复文件(cli实用程序)

capidup-cli的Python项目详细描述


licensePyPi versionPyPi pyversionCodacy Badge

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

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

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

capidup完全支持python 2和python 3。

capidup cli包是命令行实用程序。这取决于 capidup库包,它实际上实现了功能。

用法

使用capidup非常简单:

$ capidup /media/sdcard/DCIM ~/photos
/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
------------------------------

这里我们发现/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目前用于大多数加密目的, 安全是必要的。假阳性,随机或恶意引起的, 几乎不可能。重复检测当然会慢一些, 取决于选择的算法。

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

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

推荐PyPI第三方库


热门话题
java Camera API如何聚焦图像中多边形的中心?   来自Java的spring Filling邮戳模板   java只能编织本地JAR的方面吗?   javajavax。加密。BadPaddingException:解密错误无法解密加密的公钥   从java运行ansibleplaybook   在Java中,如何从不同的偏移量读取大块的字符串文件?   java Android GridView将无法确定正确的位置   executorservice如何使用自动线程管理在Java中实现生产者/消费者   JavaEJB3.1嵌入式API单元测试EJB+JPA实体   API的java输出自动停止   java Checkmarx缺陷解决方案   java缓存,获取最早的元素   WebSphere8中的JavaEJB问题   两个时区之间的java Jodatime时差   Java 8不兼容类型错误   java TableCellEditor:如果按下该键,则清除原始文本;如果没有输入,则保留值