- 桌面应用
【免费下载链接】dupeguru
Find duplicate files
dupeGuru 是一款跨平台(Linux、macOS、Windows)的开源重复文件查找工具,核心代码位于 core 目录,采用 Python 3 编写、以 Qt 为 UI 框架(见 README.md)。本文以官方帮助文档 help/en/index.rst 及其子章节为骨架,系统讲解 dupeGuru 的 Standard / Music / Picture 三种应用模式、Worded / Contents / Picture Blocks 等扫描算法与 Filter Hardness 阈值机制、结果分组与 Delta 差值审查、以及偏好设置与安全性设计,并辅以仓库源码佐证底层实现。读完本文,你将能够完成从"首次查重"到"精确清理重复文件"的完整实战闭环,并理解各类扫描选项背后的计算原理。
认识 dupeGuru:三大模式与整体工作流
dupeGuru 是一个用于"在计算机上查找重复文件"的工具,具有三种模式:Standard、Music 和 Picture,每种模式拥有各自的扫描类型与特色功能(见 help/en/index.rst)。虽然不看文档也能上手,但要真正掌握它,仍建议通读整套帮助文档;若只想完成第一次查重,可直接跳到 快速开始。
从仓库结构看,三种模式的扫描器分属独立子包:Standard 模式在 core/se、Music 模式在 core/me、Picture 模式在 core/pe,共享的扫描调度逻辑则在 core/scanner.py 与 core/engine.py 中。核心逻辑与 Qt 界面代码分离(分别位于 core 与 qt),这也解释了为什么文档强调"打开偏好面板前先选好应用模式"——不同模式会暴露不同的扫描类型与偏好选项。
快速开始:一次默认配置的标准扫描
快速开始 给出的完整流程如下:
- 启动 dupeGuru;
- 通过拖拽或点击"+"按钮添加要扫描的文件夹;
- 点击Scan开始扫描;
- 等待扫描过程结束;
- 逐一查看每个重复组(缩进显示的文件即重复文件),确认它确实是该组参考文件(组内第一行、不缩进、复选框被禁用的文件)的重复;
- 若某文件是"误报",选中它并执行Actions → Remove Selected from Results;
- 确认结果中没有误报后,执行Edit → Mark All,再执行Actions → Send Marked to Recycle bin(即把已标记的重复文件送入回收站)。
这只是基础扫描。文档明确指出,dupeGuru 提供大量可调参数以获得不同结果,并有多种审查、修改结果的手段,这正是下文展开的内容。
扫描类型与算法原理
dupeGuru 有 3 种基本扫描方式:Worded(词法)扫描、Contents(内容)扫描与Picture Blocks(图片块)扫描;前两者服务于 Standard 与 Music 模式,后者专属于 Picture 模式(见 scan.rst)。扫描行为通过偏好面板配置。在源码中,Scanner._getmatches()(core/scanner.py)根据scan_type分发到不同的匹配引擎,例如ScanType.CONTENTS与ScanType.FOLDERS走engine.getmatches_by_contents(),其余走engine.getmatches()。
Worded 扫描:从文件名或音乐标签提取词串
Worded 扫描会从每个文件提取一个字符串并将其拆分为单词,字符串可来自两个来源:文件名或音乐标签(仅 Music 版)。
当来源是音乐标签时,需要选择使用哪些标签。例如选择分析artist和title标签,会得到类似 "The White Stripes - Seven Nation Army" 的字符串(scan.rst)。
分词规则如下(scan.rst):
- 按空格字符切分;
- 移除所有标点(部分替换为空格,部分直接删除);
- 所有单词转小写。
例如字符串 "This guy's song(remix)" 会得到this、guys、song、remix四个词。
匹配百分比的计算:两个字符串的匹配度 = 匹配的单词数 ÷ 两串的单词总数,其中每个匹配词计 2 分。若结果 ≥ Filter Hardness(如 80),即判定为重复。例如 "a b c d" 与 "c d e":4 个词匹配、7 个词总数,匹配率 57(scan.rst)。源码层面,word_weighting、match_similar_words、min_match_percentage作为关键字参数传入engine.getmatches()(core/scanner.py),其中min_match_percentage即 Filter Hardness 的实现载体。
Fields 字段:解决多段式文件名
歌曲文件名常含多段信息,会造成误报。例如 "Dolly Parton - I Will Always Love You" 与 "Whitney Houston - I Will Always Love You" 并非同一首歌(演唱者不同),但朴素算法下匹配率高达 71%。为此引入Fields概念:字段以-分隔。选择Filename - Fields扫描类型时,每个字段被单独比较,最终匹配分数取所有字段中的最低值。上例中标题 100% 匹配、歌手 0% 匹配,最终得分为 0(scan.rst)。
由于命名策略并非完全统一,可能出现 "The White Stripes - Seven Nation Army" 与 "Seven Nation Army - The White Stripes" 这类字段顺序颠倒的情况,因此提供Filename - Fields (No Order)类型:所有字段两两比较,保留最高分,再取各字段最低分作为最终分数——本例结果为 100(scan.rst)。源码中该类型由ScanType.FIELDSNOORDER触发,会设置no_field_order=True后再按 FIELDS 处理(core/scanner.py)。
注意:每个字段只能用一次。因此 "The White Stripes - The White Stripes" 与 "The White Stripes - Seven Nation Army" 的匹配分是 0——第二个 "The White Stripes" 已被第一个字段"用掉",无法再与对方首字段比较(scan.rst)。
Tags扫描方式始终是"字段化"的:选择该方式时还需指定参与比较的标签,每个标签即一个字段。
词权重(Word Weighting)
开启后,匹配百分比的计算方式改变:更大的词权重更高。每个词不再计为 1,而是按字符数计值。例如 "ab cde fghi" 与 "ab cde fghij":总字符 19,匹配字符 10("ab" 计 4,"cde" 计 6),匹配率 53%(scan.rst)。该选项在源码中对应Scanner.word_weighting,通过kw["weight_words"]传入匹配引擎(core/scanner.py)。
相似词匹配(Similarity Matching)
开启后,相似单词也会被计为匹配。例如 "The White Stripes" 与 "The White Stripe" 的匹配分将从 66 升到 100(scan.rst)。判定规则:两个词仅需少量编辑操作(删一个字母、加一个字母等)即可相等,即视为相似;实际使用的函数是 Python 的get_close_matches,截断值为0.8(scan.rst)。
警告:该选项需谨慎使用。开启后结果中很可能出现大量误报,但也能找到其他方式找不到的重复项,且扫描速度会显著变慢(scan.rst)。源码中的开关为Scanner.match_similar_words,对应kw["match_similar_words"](core/scanner.py)。
Contents 扫描:按内容精确比对
Contents 扫描比 Worded 简单得多:读取文件内容,若内容完全相同则视为重复(scan.rst)。
相比文件名比较,读内容耗时更长。为避免无谓地读取整个文件,dupeGuru 先按文件大小分组,丢弃组内孤立的文件,再对剩余文件读取内容。内容比较使用MD5 哈希(scan.rst)。文档也客观指出:虽然 MD5 撞库(forge)容易,但那是"有意伪造";两个文件恰好同时具备相同 MD5 与相同大小的概率仍然极小。此外,Filter Hardness 在此类扫描中不生效(scan.rst)——这一点与 FAQ 中"Filter Hardness 滑块在 Contents 扫描下无法移动"的现象完全吻合(faq.rst)。
Folders 扫描:查找重复文件夹
Folders 是 Contents 的一种特殊扫描类型:行为与普通 Contents 扫描一致,但目标是找重复文件夹而非重复文件。若两个文件夹内所有文件的对应内容都相同,则二者互为重复(scan.rst)。
该扫描是递归的,子文件夹也会被检查。dupeGuru 只保留"最大的鱼":若两个匹配的文件夹各自还包含子文件夹,这些子文件夹不会出现在最终结果中。此模式下,结果呈现的是文件夹而非文件(scan.rst)。这一"去重去重"行为在源码中也有印证:get_dupe_groups()在ScanType.FOLDERS时会移除"父路径也在匹配中"的匹配(core/scanner.py)。
Picture Blocks 扫描:图片模糊匹配
Picture 模式与另两种模式完全不同,其扫描类型是独立的。第一个类型即"Contents"扫描的升级版——Picture Blocks(scan.rst)。
流程分两阶段(scan.rst):
- 图片分析阶段:以 RGB 位图模式打开每张图片,将其"块化"——建立 15×15 的网格,计算每个格子的平均颜色。此阶段非常耗时,结果会缓存到数据库("picture cache",即图片缓存)。
- 比较阶段:将两图对应网格的平均颜色逐一比较,计算颜色差(各侧 R、G、B 差值之和),所有差值累加为最终"分数"。
若最终分数 ≤100 - threshold,即判定匹配(scan.rst)。阈值 100 附加一个约束:图片必须完全相同(由于平均化,偶有非完全相同图片得到 0 分,但 "100%" 语义上即"完全相同",故这些情形被排除);想要"非常相似但允许少量模糊差异",选 99%(scan.rst)。
比较阶段是 CPU 密集型的,可能耗时较长。该任务已利用多核 CPU 优化,但由于模糊匹配的本质,仍须每张图片与其他所有图片比较,算法是二次方的(若待比较图片数为 N,比较次数为 N×N)(scan.rst)。源码中对应core/pe/matchblock.py的getmatches()(core/pe/matchblock.py),签名中的match_scaled、match_rotated分别对应偏好里的"允许不同尺寸/不同旋转的图片匹配"。
EXIF Timestamp 扫描
此类型很简单:读取每张图片的 EXIF 信息并提取DateTimeOriginal标签,若两图的标签相同,则视为重复(scan.rst)。实现位于 core/pe/matchexif.py。
警告:被修改过的图片常常保留原 EXIF 时间戳,使用该类型时需警惕误报(scan.rst)。
文件夹选择与文件夹状态
启动 dupeGuru 后首先看到的是文件夹选择窗口,它包含应用模式选择、扫描类型选择以及待扫描文件夹列表(folders.rst)。
应用模式选择
三种模式的分工如下(folders.rst):
- Standard:适用于任意类型文件,最具通用性,但缺少其他模式的专用特性;
- Music:只扫描音乐文件,支持标签比较,结果窗口含大量音频相关信息列;
- Picture:只扫描图片,其 Contents 扫描类型是强大的模糊匹配器,能找出"相似但并非完全相同"的图片。
选择应用模式不仅会改变下方可用的扫描类型,还会改变偏好面板中的可用选项。因此若要微调扫描,务必先选好应用模式,再打开偏好面板。
扫描类型与文件夹列表
扫描类型选择器决定本次扫描的方式,详见 扫描文档。
添加文件夹:点击"+"按钮。若之前添加过文件夹,会弹出含最近添加文件夹的菜单,点击其中一项即可直接加入;点击菜单第一项Add New Folder...则弹窗选择新文件夹;从未添加过时不会弹菜单,直接提示选择新文件夹。另一种方式是直接把文件夹拖入列表(folders.rst)。
移除文件夹:选中后点击"-"。若选中的是某个子文件夹,点击该按钮会把该子文件夹设为excluded(排除)状态而非移除(folders.rst)。
文件夹的三种状态
每个文件夹处于以下三种状态之一(folders.rst):
| 状态 | 含义 |
|---|---|
| Normal | 该文件夹中发现的重复文件可以被删除。默认状态。 |
| Reference | 该文件夹中的重复文件不可被删除;其中的文件只能占据重复组的参考位置。若多个参考文件夹的文件落入同一重复组,仅保留一个,其余从组中移除。 |
| Excluded | 该目录下的文件不参与扫描。 |
当为某个目录设置状态时,其所有子文件夹自动继承该状态,除非你显式给某个子文件夹单独设置状态(folders.rst)。
准备好后点击Scan按钮启动扫描,结束后进入结果窗口。
结果审查:重复组、参考文件与 Delta 差值
扫描完成后,dupeGuru 以重复组列表形式展示结果(results.rst)。
重复组的结构
一个重复组是一组彼此全部匹配的文件。每组有一个参考文件和一个或多个重复文件:参考文件是组内第一个文件,其复选框被禁用;其下缩进显示的即是重复文件(results.rst)。
你可以标记重复文件,但永远不能标记组的参考文件——这是防止 dupeGuru 连重复文件带参考文件一起删掉的安全措施(results.rst)。
参考文件的确定规则(results.rst):
- 优先看文件夹状态:来自Reference 文件夹的文件在该组中永远是参考文件;
- 若全部来自普通文件夹,则由文件大小决定:dupeGuru 假定你总想保留最大文件,因此最大的文件占据参考位置。
你可以手动更换参考文件:选中想要提升的重复文件,点击Actions → Make Selected into Reference(results.rst)。
审查结果的方法
虽然你可以直接Edit → Mark All然后Actions → Send Marked to Recycle bin快速删除所有重复文件,但文档始终建议在删除前逐一审查(results.rst)。
- Details 面板:显示当前选中文件及其参考文件的全部细节,非常适合快速判断某个重复是否真的是重复;也可以双击文件,用系统关联应用打开它(results.rst)。
- 策略选择:若误报多于真重复(例如 Filter Hardness 很低),最佳做法是审查后标记真正的重复,再执行Actions → Send Marked to Recycle bin;若真重复多于误报,则反过来标记所有误报文件,执行Actions → Remove Marked from Results(results.rst)。
标记与选择
marked(已标记)指重复文件旁的小方框被打勾;selected(已选中)指该文件被高亮。dupeGuru 支持标准的 Shift/Command/Control 多选操作,按空格键可切换所有已选中文件的标记状态(results.rst)。
Show Dupes Only 模式
开启后,结果只显示重复文件、不显示各自的参考文件,且仍可正常选择、标记、排序(results.rst)。
典型应用场景:正常模式下结果按重复组的参考文件排序,因此若想标记所有 "exe" 扩展名的重复文件,直接按 "Kind" 列排序是做不到的(一个组可能包含多种类型文件)。此时用 Dupes Only 模式即可完成(results.rst):
- 启用 Dupes Only 模式;
- 通过 "Columns" 菜单添加 "Kind" 列;
- 点击 "Kind" 列头按类型排序;
- 找到第一个 "exe" 类型的重复文件并选中;
- 向下滚动找到最后一个 "exe" 重复文件;
- 按住 Shift 点击它(区间全选);
- 按空格标记所有选中的重复文件。
Delta Values 差值视图
打开此开关后,数值列将显示相对于该重复文件参考值的差值而非绝对值,并以橙色显示以便识别。例如重复文件 1.2 MB、参考文件 1.4 MB,则 Size 列显示-0.2 MB(results.rst)。
此外,非数值列的值若与参考不同也会显示为橙色,相同则保持黑色。配合 Dupes Only 模式的列排序,可实现非常强大的扫描后过滤(results.rst)。
Dupes Only × Delta Values 的组合威力
两者的组合才是 Dupes Only 的真正价值所在(results.rst):
- 按差值范围筛选:想删除与参考相差超过 300 KB 的重复,可按 Size 列排序,选中所有 -300 以下的重复删除,再对列表底部 +300 以上的重复做同样操作。
- 按属性是否相同分组:非数值列在差值模式下,排序会把"与参考相同(黑色)"的行聚在一起。例如做了 Contents 扫描但只想删同名重复:按文件名排序,与参考同名的重复会聚在一起且显示黑色。
- 改选参考文件:新扫描且无参考文件夹时,每组的参考是最大文件。若想改为"最新修改时间",可把 Dupes Only 结果按修改时间降序排列,选中所有修改时间差值 > 0 的重复,执行Make Selected into Reference。必须降序的原因是:同一组内若选中多个文件,只有列表中的第一个会被提升为参考,其余被忽略;降序排列能保证列表第一项就是最后修改的文件。
FAQ 中给出了大量可直接套用的组合操作,例如"删除与参考相差超过 300 KB 的文件"、"把最新修改文件设为参考"、"删除与参考相差超过 3 秒的歌曲"、"把最高码率歌曲设为参考"等,均为上述两种模式的组合演练(faq.rst)。
结果过滤(Filtering)
dupeGuru 支持扫描后过滤,可把结果缩小到某个子集再执行操作,例如轻松标记文件名含 "copy" 的所有重复(results.rst)。
用法:在结果窗口右上角的 "Filter" 搜索框中输入过滤串。输入内容会应用于结果中每个重复的完整路径,只有至少一个重复匹配过滤条件的重复组才会显示(results.rst)。
当组内并非所有重复都匹配过滤条件时,该组仍会完整显示所有重复,但不匹配的重复处于"参考模式"——因此你执行 "Mark All" 之类的操作时,可以确信只会标记到过滤出的重复。清空输入框或点击 "X" 即可回到未过滤状态(results.rst)。
过滤语法(results.rst):
- 简单模式(默认):输入即匹配字符串,唯一的通配符是*。例如输入
[*]可匹配任何带[]括号的内容,括号中间任意; - 高级模式:勾选 "Use regular expressions when filtering" 后改用正则表达式匹配;
- 简单与正则模式均不区分大小写;
- 正则不需要匹配整个文件名,只要包含一段匹配表达式的子串即可。
Actions 菜单全解析
结果窗口的 Actions 菜单包含以下操作(results.rst):
| 菜单项 | 行为说明 |
|---|---|
| Clear Ignore List | 清除所有已添加的忽略匹配。需重新扫描后新清除的忽略列表才生效。 |
| Export Results to XHTML | 将当前结果导出为 XHTML 文件,导出时可见的列即文件中的列;文件会自动用默认浏览器打开。 |
| Send Marked to Trash | 把已标记的重复文件送入回收站;操作前会展示删除选项(见下节)。 |
| Move Marked to... | 提示目标位置,把已标记文件移动到该位置;是否重建源路径取决于 "Copy and Move" 偏好。 |
| Copy Marked to... | 提示目标位置,把已标记文件复制到该位置;同样受 "Copy and Move" 偏好影响。 |
| Remove Marked from Results | 从结果中移除已标记的重复(不动磁盘上的实际文件)。 |
| Remove Selected from Results | 从结果中移除选中的重复;注意所有选中的参考文件会被忽略,只有重复可被此操作移除。 |
| Make Selected into Reference | 把选中的重复提升为参考。若该重复所在组的参考来自参考文件夹(文件名蓝色显示),则不生效;若同一组选中多个,仅第一个被提升。 |
| Add Selected to Ignore List | 先把选中重复从结果中移除,再把"该重复与当前参考的匹配"加入忽略列表;此后扫描中该匹配不再出现(重复文件本身可能再次出现,但会匹配到其他参考)。可用 Clear Ignore List 清除。 |
| Open Selected with Default Application | 用系统关联应用打开选中文件。 |
| Reveal Selected in Finder | 打开选中文件所在的文件夹。 |
| Invoke Custom Command | 用当前选中文件作为参数,调用你在偏好中设置的外部程序。 |
| Rename Selected | 提示新名称并重命名选中文件。 |
删除选项(Deletion Options)
这些选项影响删除重复文件的方式,大多数情况下无需开启(results.rst):
- Link deleted files(链接已删除文件):删除后用指向参考文件的链接替换原文件,可选symlink(符号链接)或hardlink(硬链接)。简言之:符号链接是指向文件路径的快捷方式,原文件被删或移动则链接失效;硬链接指向文件本身,等价于"真实"文件,只有所有指向该文件的硬链接都被删除,文件才真正消失。macOS 与 Linux 下完整支持;Windows 下较复杂——Windows XP 不支持,Vista 及以上支持,但需要 dupeGuru 以管理员权限运行。
- Directly delete files(直接删除文件):不送回收站而是直接删除,主要用于故障排查。通常仅在 dupeGuru 无法正常删除文件(例如网络存储 NAS 上删除失败)时才开启。
FAQ 也印证了这一点:无法送入回收站时,最常见原因是文件权限——需要对待删除文件拥有写权限;若修复权限后仍失败,可尝试开启 "Directly delete files"(faq.rst)。
偏好设置详解
偏好面板中各项设置的完整说明如下(preferences.rst):
| 偏好项 | 说明 |
|---|---|
| Tags to scan | 使用Tags扫描类型时,选择用于比较的标签。 |
| Word weighting | 词权重,见词权重一节。 |
| Match similar words | 相似词匹配,见相似词匹配一节。 |
| Match pictures of different dimensions | 勾选后允许不同尺寸的图片进入同一重复组。对应 core/pe/matchblock.py 的match_scaled参数。 |
| Match pictures of different rotations | 勾选后允许不同旋转角度的图片进入同一重复组。对应match_rotated参数。 |
| Filter Hardness | 两个文件被视为重复所需的阈值。值越低重复越多;阈值含义取决于扫描类型。仅对 Worded 与 Picture Blocks 扫描生效。 |
| Can mix file kind | 勾选后允许重复组内出现不同扩展名的文件;不勾选则不允许。源码层面,该开关未开启时会在get_dupe_groups()中按扩展名过滤匹配(core/scanner.py)。 |
| Ignore duplicates hardlinking to the same file | 开启后 dupeGuru 会校验重复是否指向同一inode(文件系统节点);若是则不算重复。仅适用于 macOS 与 Linux。 |
| Use regular expressions when filtering | 勾选后,过滤功能将把过滤查询当作正则表达式处理。 |
| Remove empty folders after delete or move | 开启后,当文件被删除或移动且所在文件夹变空时,该文件夹会被一并删除。 |
| Copy and Move | 决定 Actions 菜单中 Copy/Move 操作的行为(见下)。 |
| Custom Command | 决定 "Invoke Custom Command" 动作调用的外部命令(见下)。 |
Copy and Move 的三种路径策略
(preferences.rst)
- Right in destination:所有文件直接放入所选目标目录,完全不重建源路径。
- Recreate relative path:在目标目录中重建源文件的相对路径,直到"Directories 面板"中的根选择为止。例如面板中加入
/Users/foobar/SomeFolder,把/Users/foobar/SomeFolder/SubFolder/SomeFile.ext移动到目标/Users/foobar/MyDestination,最终落点是/Users/foobar/MyDestination/SubFolder(源路径中的SomeFolder被裁剪掉)。 - Recreate absolute path:在目标目录中完整重建源文件的绝对路径。例如把
/Users/foobar/SomeFolder/SubFolder/SomeFile.ext移动到/Users/foobar/MyDestination,最终落点为/Users/foobar/MyDestination/Users/foobar/SomeFolder/SubFolder。
所有情况下,dupeGuru 都会妥善处理命名冲突:若目标中已存在同名文件,则在目标文件名前加数字前缀。
Custom Command 外部命令
该偏好决定 "Invoke Custom Command" 动作调用的命令,可用于调用任何外部程序,例如安装的 diff 对比工具(preferences.rst)。
命令格式与命令行写法一致,但包含 2 个占位符:%d与%r,分别会被替换为选中重复文件的路径(%d)和其参考文件的路径(%r)。若可执行文件路径含空格,需用""引号包裹;占位符也应加引号,因为重复与参考的路径很可能含空格。示例(preferences.rst):
"C:\Program Files\SuperDiffProg\SuperDiffProg.exe" "%d" "%r"重新设定参考文件优先级(Re-Prioritize)
dupeGuru 会尽量自动决定每组参考文件该由哪个重复担任,但有时会选错。多数情况下,"Delta Values + Dupes Only + Make Selected into Reference" 的组合已够用;若仍不够,可使用Re-Prioritization 对话框,通过 Actions 菜单的 "Re-Prioritize Results" 调出(reprioritize.rst)。
该对话框允许按条件为每个重复组挑选参考重复:左侧列出可选条件,右侧是你已选的条件列表。一个条件由"类别 + 参数"组成,例如 "Size (Highest)" 表示最大的文件胜出,"Folder (/foo/bar)" 表示该文件夹中的重复胜出。添加方法:先在组合框中选择类别,再在下方列表中选择子参数,然后点击右箭头按钮(reprioritize.rst)。
右侧列表的顺序很重要(可通过拖拽调整):挑选参考时先使用第一个条件;若打平,则使用第二个条件,依此类推。例如条件依次为 "Size (Highest)" 与 "Filename (Doesn't end with a number)",则组内会选最大的文件;若两个或多个文件大小相同,则选文件名不以数字结尾的那个。当所有条件都打平时,沿用组内重复原先的排列顺序(reprioritize.rst)。
安全性与常见问题
安全性设计
FAQ 明确回答"dupeGuru 使用起来有多安全":非常安全。它被设计为防止删除你不打算删除的文件。第一重保护是参考文件夹系统——可定义绝对不想让 dupeGuru 删除其中文件的文件夹;第二重保护是组参考系统——确保每个重复组始终至少保留一个成员(faq.rst)。
状态栏的 '(X discarded)' 提示
在某些情况下,出于安全原因,部分匹配不会进入最终结果。示例:有 A、B、C 三个文件,用较低 Filter Hardness 扫描后,A 匹配 B、A 匹配 C,但 B 与 C 不匹配。dupeGuru 无法把三者放进同一组(并非组内所有文件两两匹配),但它也不会拆成 A-B 与 A-C 两个组,原因:B 与 C 不匹配,很可能意味着二者(或其之一)并非真正的重复;若分成两组,你可能会把 B、C 都删掉,而其中一个是误报,这显然不是你想要的结果。因此 dupeGuru 会丢弃 A-C 这条匹配并在状态栏给出提示。若你删除 B 后重新扫描,A-C 匹配会再次出现在结果中(faq.rst)。
参考文件的复选框被禁用
无法标记重复组的参考文件(组内第一个文件)。此时可把某个重复提升为参考:选中组内想要提升的重复文件,点击Actions → Make Selected into Reference。若参考文件来自参考文件夹(蓝色文字显示),则无法将其移出参考位置(faq.rst)。
用户文件与偏好存储位置
用户文件(调试日志、缓存等)的位置因平台而异(faq.rst):
- Linux:
~/.local/share/data/Hardcoded Software/dupeGuru - macOS:
~/Library/Application Support/dupeGuru
偏好设置存储在其他位置:
- Linux:
~/.config/Hardcoded Software/dupeGuru.conf - macOS:内置于
defaults系统,键名为com.hardcoded-software.dupeguru
其他高频 FAQ
- 想要确保某个文件夹的文件永不删除:在文件夹选择中将其状态设为Reference(faq.rst)。
- 想标记某文件夹下的所有文件:启用 Dupes Only 模式并点击 Folder 列排序,即可轻松选中同文件夹的重复并按空格标记(faq.rst)。
- 不想把 [live] 和 [remix] 版本当作重复:阈值足够低时它们必然出现,无法预防,但可用扫描后过滤轻松移除:在 Filter 框输入
[*],执行Mark → Mark All,再Actions → Remove Selected from Results(faq.rst)。 - Filter Hardness 滑块动不了:该滑块只对支持"模糊性"的扫描类型有意义;Contents 等只支持精确匹配的扫描类型下它会被禁用(faq.rst)。
- Picture 模式 Contents 扫描为什么慢:该方法能检测"不完全相同"的重复照片,代价是时间——每张图都要与其他所有图逐一模糊匹配,非常耗 CPU。若只需找精确重复,改用 Standard 模式 + Contents 扫描;若照片带 EXIF 标签,可尝试快得多的 EXIF 扫描(faq.rst)。
结语
从 Worded 扫描的词级模糊匹配、Contents 扫描的大小分组 + MD5 校验,到 Picture Blocks 的 15×15 网格色块比较,dupeGuru 用一套可配置的扫描体系覆盖了"文件名级、内容级、图片内容级"三个粒度的查重需求;而参考文件夹、组参考、忽略列表与(X discarded)丢弃机制则共同构成了它的安全底线。结合本文的快捷操作清单(Dupes Only + Delta Values + 过滤 + Make Selected into Reference),你可以在扫描后快速把结果收缩到真正需要的子集,再安全地批量回收、移动或复制。若想深入了解内部实现,可继续阅读 开发者文档、扫描器源码 core/scanner.py 与图片匹配实现 core/pe/matchblock.py。
- 桌面应用
【免费下载链接】dupeguru
Find duplicate files
相关推荐
突破重复文件查找极限:dupeGuru自定义扫描模式深度解析
突破重复文件查找极限:dupeGuru自定义扫描模式深度解析 dupeGuru是一款高效的重复文件查找工具,能够帮助用户快速定位并清理系统中的重复文件,释放宝贵
桌面应用简单三步告别重复文件:DupeGuru完整使用指南
简单三步告别重复文件:DupeGuru完整使用指南 DupeGuru是一款高效的重复文件查找工具,能够帮助用户快速扫描并清理系统中的重复文件,释放宝贵的存储空间
桌面应用如何快速清理重复文件:dupeGuru完整使用指南
如何快速清理重复文件:dupeGuru完整使用指南 还在为电脑存储空间不足而烦恼吗?dupeGuru这款强大的重复文件清理工具能够帮你彻底解决这个问题。作为一款
桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考