dupeGuru 文件夹选择完全指南:从启动窗口到扫描前的目录管理与状态控制
桌面应用【免费下载链接】dupeguruFind duplicate files项目地址https://gitcode.com/gh_mirrors/du/dupeguru点击查看免费下载dupeGuru 是一款用于查找重复文件的跨平台桌面工具而文件夹选择窗口Folder Selection是每次启动时看到的第一个界面也是整个扫描流程的入口。本文围绕官方文档 help/en/folders.rst 展开结合仓库中core/directories.py、core/gui/directory_tree.py、qt/directories_dialog.py等源码与测试系统讲解应用模式、扫描类型、文件夹列表操作与文件夹三种状态的完整机制。读完本文你将掌握如何正确配置扫描输入、理解 Reference/Excluded 状态的底层语义并能从源码角度推断状态继承与文件收集的真实行为。窗口概览一次扫描需要哪些基本输入启动 dupeGuru 后看到的第一个窗口就是文件夹选择窗口。它收集开始一次扫描所需的全部基础输入官方文档将其归纳为三部分应用模式Application Mode决定用哪一套扫描引擎与功能特性扫描类型Scan Type决定匹配算法采用哪种策略待扫描文件夹Folders to scan决定扫描覆盖哪些目录。从 Qt 实现看该窗口对应 qt/directories_dialog.py 中的DirectoriesDialog顶部是应用模式单选钮appModeRadioBox选项为 Standard/Music/Picture中间是扫描类型下拉框scanTypeComboBox与 More Options偏好设置按钮中部为文件夹树视图QTreeView底部是-、、Load Results 与 Scan 按钮。窗口默认尺寸为 420×338并提供DirectoriesWindowRect偏好记忆窗口位置见 qt/directories_dialog.py。应用模式三种引擎三种扫描能力dupeGuru 拥有三种主要应用模式官方文档将其称为 Standard、Music 与 Picture对应源码 core/app.py 中的AppMode枚举模式AppMode 常量定位核心能力Standard标准STANDARD 0适用于任何类型文件最通用但缺少其他模式的专属特性Music音乐MUSIC 1只扫描音乐文件支持标签Tags比较结果窗口含大量音频相关信息列Picture图片PICTURE 2只扫描图片提供强大的模糊匹配扫描类型可找到相似但不完全相同的图片选择应用模式不仅改变下方的扫描类型列表还会改变偏好设置面板中可用的选项。因此官方文档特别强调若想精细调整扫描参数请先选定应用模式再打开偏好设置面板。底层来看应用模式直接决定扫描器类Scanner class。在 core/app.py 中SCANNER_CLASS属性将三种模式分别映射到pe.scanner.ScannerPEPicture、me.scanner.ScannerMEMusic与se.scanner.ScannerSEStandard同时fileclasses与METADATA_TO_READ也会随模式切换例如 Picture 模式会读取尺寸与 EXIF 时间戳元数据。界面侧切换应用模式由appModeButtonSelected触发调用self.app.model.app_mode mode并刷新扫描类型下拉列表见 qt/directories_dialog.py。扫描类型选择匹配策略扫描类型选择器决定本次扫描采用的匹配策略。官方文档此处指引读者参阅 扫描过程详解本文只做入口性说明三种模式各自的可用扫描类型由对应扫描器的get_scan_options()静态方法提供例如 Standard 模式的 core/se/scanner.py 返回FilenameScanType.FILENAME——按文件名分词匹配ContentsScanType.CONTENTS——按文件内容精确匹配FoldersScanType.FOLDERS——按文件夹内容整体匹配。扫描类型在底层统一由 core/scanner.py 的ScanType枚举描述FILENAME0、FIELDS1、FIELDSNOORDER2、TAG3、FOLDERS4、CONTENTS5Picture 模式另有FUZZYBLOCK10与EXIFTIMESTAMP11。界面下拉框的选项由SCANNER_CLASS.get_scan_options()动态填充当前选择会通过set_scan_type()持久化到各模式对应的偏好中见 qt/directories_dialog.py。文件夹列表操作添加、拖拽与移除添加文件夹点击按钮添加文件夹。如果此前添加过文件夹会弹出包含最近添加文件夹的菜单直接点击列表中的历史文件夹即可将其加入列表点击菜单第一项Add New Folder...会弹出文件夹选择对话框如果从未添加过任何文件夹则不弹菜单直接进入文件夹选择对话框。源码中最近文件夹由Recent类管理self.recentFolders Recent(self.app, recentFolders)添加动作addFolderTriggered使用QFileDialogDirectoryOnly 模式支持多选选择目录随后逐个调用app.model.add_directory(path)并写入最近列表见 qt/directories_dialog.py。需要留意的是add_directory并非简单追加。在 core/app.py 中它调用directories.add_path(Path(d))而 core/directories.py 的add_path有去重与折叠逻辑路径已存在时抛出AlreadyThereError路径不存在时抛出InvalidPathError界面会分别提示已在列表中或不存在若新路径是已有目录的父目录则先移除其下所有子目录再添加避免扫描范围重叠。拖拽添加另一种添加方式是把文件夹直接拖入列表。界面层DirectoriesModel支持text/uri-listMIME 类型dropMimeData会解析拖入的 URI 列表并逐个调用add_directory见 qt/directories_model.py。移除文件夹选中要移除的文件夹后点击-按钮。关键在于如果选中移除的是一个子文件夹该文件夹不会被移除而是被设为 Excluded排除状态。这一行为对应 core/gui/directory_tree.py 的remove_selected()只有处于第一层根目录的选中项会被真正删除二层级以上的选中节点一律切换到 Excluded 状态若已全部是 Excluded 则切回 Normal作为简单的撤销手段。根目录的真正删除由app.remove_directories(indexes)完成见 core/app.py按索引倒序删除列表项。此外菜单栏的File → Save Directories / Load Directories可将当前文件夹选择保存为*.dupegurudirsXML 文件并随时恢复见 qt/directories_dialog.py。文件夹状态Normal、Reference 与 Excluded文件夹列表中的每一项都处于三种状态之一这是本窗口最具控制力的功能。官方文档给出语义如下状态含义Normal正常该文件夹中被找到的重复文件可以删除Reference参考该文件夹中的文件不能被删除其中的文件只能作为重复组的reference参考/保留位置若同一重复组中有多个 Reference 文件夹的文件仅保留一个其余移出该组Excluded排除该目录中的文件不参与扫描默认状态当然是Normal。若你希望确保某个文件夹内的文件绝不被误删可将其设为 Reference。在界面上文件夹树有两列Name与State状态列通过下拉框编辑且 Reference 状态显示为蓝色、Excluded 显示为红色见 qt/directories_model.py。底层状态由 core/directories.py 的DirectoryState枚举定义NORMAL 0、REFERENCE 1、EXCLUDED 2。文件被收集时Directories._get_files会依据状态处理core/directories.pyExcluded 状态的文件直接跳过Reference 状态的文件设置file.is_ref True这一标记随后被扫描器与结果分组逻辑使用——core/scanner.py 中重复组只会保留组内存在非 ref 文件的分组从而实现Reference 文件只作保留参照、不可删除。状态继承子文件夹自动继承父状态为某个目录设置状态后其下所有子文件夹会自动继承该状态除非你显式地为某个子文件夹单独设置状态。这一继承逻辑实现于 core/directories.py 的get_state(path)若路径在states字典中有直接记录直接返回其状态否则查询默认状态_default_state_for_path再从该路径的各级父路径path.parents按从长到短排序中找最近的已记录状态并返回。对应的设置方法set_state(path, state)core/directories.py在设置时会清除该路径下所有已显式设置的子状态保证父状态变化能立即覆盖整棵子树——这也印证了测试test_states_overwritten_when_larger_directory_eat_smaller_ones中对大目录状态吃掉小目录状态行为的约束。默认排除逻辑隐藏目录与排除列表_default_state_for_pathcore/directories.py还内置了两条默认规则若配置了排除列表exclude_list且其中有生效的正则先对目录名做正则匹配命中即默认 Excluded否则以.开头的隐藏目录默认设为 Excluded此默认状态可被用户显式覆盖。排除列表对目录级正则与文件级正则区分处理目录级正则用于默认状态判定文件级正则用于_get_files中对单个文件名的过滤core/directories.py。测试 core/tests/directories_test.py 验证了隐藏目录默认排除、且可被覆盖TestExcludeList系列测试core/tests/directories_test.py则覆盖了排除正则对目录、文件、子目录继承及覆写行为的完整场景。点击 Scan扫描流程如何被触发一切就绪后点击Scan按钮启动扫描。界面侧scanButtonClickedqt/directories_dialog.py会检查当前是否有未保存结果有则询问是否继续然后调用app.model.start_scanning(self.app.prefs.profile_scan)。核心流程位于 core/app.py 的start_scanning依据应用模式实例化对应扫描器SCANNER_CLASS()调用directories.has_any_file()预检——若所选目录不含任何可扫描文件直接提示并返回将偏好中的扫描选项如min_match_percentage、word_weighting等逐个写入扫描器实例按扫描类型收集文件FOLDERS类型调用directories.get_folders()其余调用directories.get_files()交给scanner.get_dupe_groups()生成重复分组随后展示 结果窗口。其中Directories.get_files()会递归遍历每个根目录期间持续向任务对象回报已收集文件数j.set_progress(-1, tr(Collected {} files to scan)并在遍历中检查任务取消j.check_if_cancelled()同时静默跳过无权限访问的路径捕获OSError保证个别坏目录不会中断整个扫描见 core/directories.py。从测试看状态机制的可验证行为仓库测试 core/tests/directories_test.py 为上述机制提供了可验证的边界行为建议阅读以加深理解test_states对onefile目录设置 Reference 后其不存在的子路径dir1查询状态同样返回 Reference继承生效test_get_filesReference 目录下的文件is_refTrueExcluded 目录下的文件完全缺席test_get_files_with_inherited_exclusion根目录设为 Excluded 后get_files()返回空列表test_save_and_loadsave_to_file/load_from_file的 XML 序列化往返后目录与状态完全复原test_load_from_file_with_invalid_path加载时某个目录已失效其余目录仍正常加载不因单个坏路径而失败test_get_state_returns_excluded_by_default_for_hidden_directories.foo隐藏目录默认 Excludedset_state(..., NORMAL)可覆盖。相关文档与进一步阅读扫描过程详解Worded 扫描、Contents 扫描、Picture Blocks、EXIF Timestamp 等各扫描类型的具体算法结果窗口扫描完成后如何审阅重复组、执行删除/移动等操作源码入口core/directories.py目录与状态模型、core/gui/directory_tree.py树形目录模型、qt/directories_dialog.pyQt 界面、qt/directories_model.py树视图模型与状态着色、core/scanner.py扫描类型枚举与公共扫描流程。赞分享桌面应用【免费下载链接】dupeguruFind duplicate files项目地址https://gitcode.com/gh_mirrors/du/dupeguru点击查看免费下载相关推荐dupeGuru 文件夹选择窗口完全指南目录管理、三种文件夹状态与扫描启动流程dupeGuru 文件夹选择窗口完全指南目录管理、三种文件夹状态与扫描启动流程 启动 dupeGuru 后看到的第一个窗口就是文件夹选择窗口Folder S桌面应用dupeGuru 文件夹选择窗口完全指南扫描范围配置、目录状态管理与实战操作dupeGuru 文件夹选择窗口完全指南扫描范围配置、目录状态管理与实战操作 本文基于 dupeGuru 官方帮助文档 help/hy/folders.rs桌面应用dupeGuru 文件夹选择窗口完全指南扫描目录配置、三种文件夹状态与底层实现原理dupeGuru 文件夹选择窗口完全指南扫描目录配置、三种文件夹状态与底层实现原理 本指南以 dupeGuru 官方文档 help/de/folders.rs桌面应用上一篇如何永久保存网易云音乐歌单为无损FLAC格式完整指南下一篇网易云音乐无损音乐下载终极指南永久珍藏你的专属歌单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

猫抓资源嗅探扩展:装好即用,3分钟拿走网页视频与M3U8

猫抓资源嗅探扩展:装好即用,3分钟拿走网页视频与M3U8

猫抓资源嗅探扩展:装好即用,3分钟拿走网页视频与M3U8 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 上周我想留一段线上产…

2026/10/3 17:33:56 阅读更多 →
FanControl 上手指南:4 步让 Windows 电脑告别“直升机模式“

FanControl 上手指南:4 步让 Windows 电脑告别“直升机模式“

FanControl 上手指南:4 步让 Windows 电脑告别"直升机模式" 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/Git…

2026/10/3 17:32:56 阅读更多 →
Radix Primitives `@radix-ui/react-presence` 演进全解:动画进出场原理解析与 1.1.4~1.1.10 版本变更深度剖析

Radix Primitives `@radix-ui/react-presence` 演进全解:动画进出场原理解析与 1.1.4~1.1.10 版本变更深度剖析

前端UI组件 【免费下载链接】primitives Radix Primitives is an open-source UI component library for building high-quality, accessible design systems and web apps. Maintained by workos. 项目地址: https://gitcode.com/gh_mirrors/pr/primitives 点击查看…

2026/10/3 17:32:55 阅读更多 →

最新新闻

Paperclip架构:React+OpenClaw+Claude Code的轻量AI智能体实践

Paperclip架构:React+OpenClaw+Claude Code的轻量AI智能体实践

1. 项目概述:Paperclip 不是回形针,而是一个被严重误读的 AI 工具链代号 “Paperclip”这个词在当前中文技术社区里,正经历一场典型的语义漂移——它既不是 Office 文档里的那个金属小物件,也不是某款冷门开源库的官方名称&#x…

2026/10/3 21:52:47 阅读更多 →
人工智能训练师高级证书备考:AIGC核心考点与实操经验

人工智能训练师高级证书备考:AIGC核心考点与实操经验

人工智能训练师(高级)这个证书我今年刚考下来,注册、报名、刷题库,前后折腾了快三个月,橙点同学平台上的题我差不多过了三轮,最后理论和实操都是一次性通过。如果你正在准备这个考试,或者正想往…

2026/10/3 21:52:47 阅读更多 →
SpringBoot debug实战:从自动装配到最小链路跑通

SpringBoot debug实战:从自动装配到最小链路跑通

【SpringBoot香樟转转】debugDay01从零搭一个校园二手交易平台,第一天全在跟报错较劲。在做“香樟转转”这个 SpringBoot 项目之前,我其实有过心理准备,但真到了写代码调试的阶段,才发现问题的密度远超预期。这篇文章就把 Day01 这…

2026/10/3 21:50:45 阅读更多 →
AI编程Skills全攻略:从安装到自定义SOP

AI编程Skills全攻略:从安装到自定义SOP

先问自己一个直白的问题:同一个 AI 编程助手,为什么有人用着像带了十年默契的老搭档,有人却觉得它笨得只会空泛附和?差别通常不在模型本身,而在一个很容易被忽略的配置——Skills。 这正是 Claude Code、Codex、OpenC…

2026/10/3 21:50:45 阅读更多 →
Cortex-M HardFault定位实战:从异常模型到现场追踪

Cortex-M HardFault定位实战:从异常模型到现场追踪

最近一直被HardFault折腾得头皮发麻的兄弟,或者刚接触Cortex-M系列芯片、对异常处理机制还有点懵的新手,这篇文章就是给你写的。做嵌入式开发,尤其是基于Cortex-M内核的MCU开发,几乎没人能绕开HardFault这个坎。它不像普通逻辑Bug…

2026/10/3 21:50:45 阅读更多 →
Matlab+C2000嵌入式开发链路打通实战指南

Matlab+C2000嵌入式开发链路打通实战指南

1. 这不是普通插件安装:C2000嵌入式开发链路的“最后一公里”打通实录 Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors,表面看是点几下鼠标、填几个路径的常规操作,但实际踩进的是嵌入式控制开发里最典型…

2026/10/3 21:49:44 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →