ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

dupeGuru 文件夹选择完全指南:从启动窗口到扫描前的目录管理与状态控制

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),仅供参考
返回列表