ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

如何设计安全的文件清理引擎?解析 Dev Janitor 的模式匹配、目录剪枝与防误删白名单策略

如何设计安全的文件清理引擎?解析 Dev Janitor 的模式匹配、目录剪枝与防误删白名单策略 【免费下载链接】Dev-JanitorCross-platform desktop app for cleaning development artifacts, managing local developer tools, and checking common environment issues.项目地址https://gitcode.com/gh_mirrors/de/Dev-Janitor点击查看免费下载Dev Janitor 是一款跨平台桌面应用用于清理开发残留、管理本地开发工具并检查常见环境问题。它的文件清理引擎在设计上有个核心原则宁可漏删不可误删。本文解析其模式匹配、目录剪枝与防误删白名单策略帮你理解一个安全清理引擎的分层设计思路。为什么安全删除是清理工具的第一问题开发环境里看起来像垃圾的文件和真正是垃圾的文件往往只差一层目录。比如.copilot/目录里既有可清理的会话缓存也有正在使用的配置文件。清理引擎一旦把两者混为一谈用户丢失的可能不是缓存而是数周的工作配置。Dev Janitor 的清理引擎源码集中在 ai_cleanup/mod.rs整体采用三层防线 删除前终验的架构模式匹配识别目标但刻意只打靶具体文件目录剪枝命中即跳过整棵子树避免重复报告白名单在扫描和删除两个阶段都兜底保护关键资产删除前终验删除动作单独再做一次完整校验。第一层模式匹配——只认垃圾特征不认目录名引擎定义了三类特征库全部是垃圾特征而非工具特征AI 工具残留模式AI_TOOL_PATTERNS在 ai_cleanup/mod.rs 中模式表精确指向各 AI 编程工具确定可再生的产物例如.aider.chat.history.md、.aider.tags.cacheAider 历史与缓存.copilot/session-state、.copilot/session-store.dbCopilot CLI 会话数据.qwen/.cache、.cline/cache、.windsurf等缓存目录一个关键细节check_ai_tool_patternai_cleanup/mod.rs对不带路径分隔符的模式只做文件名相等或以其开头匹配对带路径的模式才做后缀/包含匹配。这意味着它不会把整个.copilot配置目录当成垃圾——只有session-state、session-store.db这两个会话目标会被命中。项目里的测试用例如 detects_copilot_cli_session_targets_without_config_noise专门验证了这一点配置目录保留会话缓存命中。临时文件模式TEMP_FILE_PATTERNS覆盖编辑器与系统的常见临时产物ai_cleanup/mod.rs.swp、.bak、.DS_Store、Thumbs.db等用文件名等于或以模式结尾的方式匹配。异常文件启发式check_anomalousai_cleanup/mod.rs 还有一组启发式规则零字节文件、可疑的单字符文件名、纯特殊字符命名。注意它给.gitkeep这类已知合法的空文件开了豁免——启发式规则同样要留白名单。第二层目录剪枝——命中即整棵跳过扫描主循环scan_targetai_cleanup/mod.rs在遍历目录时一旦命中白名单目录或垃圾目录就调用entries.skip_current_dir()直接剪掉整棵子树。这带来两个好处性能不再遍历已知无意义的深层内容去重一个垃圾目录只报告一次不会出现目录 目录里 10 个文件共 11 条重复结果。测试 reports_matching_directory_once_without_descendant_duplicates 专门锁定了这个行为。此外scan_ai_junkai_cleanup/mod.rs最后还按完整路径去重并用 rayon 并行扫描多个目标目录结果按大小降序排列——用户先看到的永远是最值得清理的大块头。第三层防误删白名单——关键资产永不进入视野白名单是扫描阶段的硬边界由is_whitelistedai_cleanup/mod.rs实现分两类白名单内容保护对象WHITELIST_DIRECTORIES.git、node_modules、target、venv等L110-L121版本库、依赖与构建产物WHITELIST_EXTENSIONSpdf、docx、psd、raw、zip等L100-L108文档、音视频、设计源文件、压缩包设计上有两层考量版本库和数据文件绝不被当垃圾.git被剪枝意味着清理引擎看不见仓库历史非代码资产优先保护psd、raw、cr2这类源文件一旦误删无法恢复白名单按扩展名一票否决。配合根目录扫描的深度钳制ROOT_SCAN_MAX_DEPTH 8ai_cleanup/mod.rs即使用户误选扫描盘符根目录引擎也会把目标收敛到用户主目录并限制递归深度把爆炸半径控制在最小。删除前终验validate_ai_junk_delete_target 的五道门扫描阶段说这可能是垃圾删除阶段则独立再验一遍。delete_ai_junkai_cleanup/mod.rs在执行删除前先调用validate_ai_junk_delete_targetai_cleanup/mod.rs过五道门符号链接拒绝canonicalize_existing_pathL298-L310检测到目标是符号链接时直接拒绝——防止指向别处的快捷方式绕过校验把链接目标删掉根目录与主目录拒绝is_root_or_home_pathL312-L321拦截对/和~的删除请求白名单复查删除路径再过一次is_whitelisted即使扫描结果被截断或缓存过期也有兜底二次特征匹配路径必须仍能命中 AI 残留、临时文件或异常规则之一否则报Path is not a recognized AI junk target拒绝执行平台级保留名拦截Windows 下额外拦截con、nul等保留名L502-L517。删除失败时还有分级重试Windows 下去只读属性后重试fix_permissions_and_deleteL566-L593Unix 下chmod补写权限后重试L596-L611。前后端如何协作命令通道与确认弹窗Rust 核心能力通过 Tauri 命令暴露给前端入口在 commands/ai_cleanup.rsscan_ai_junk_cmd接收路径与maxDepth并做了maxDepth.min(20)的硬上限钳制防止 UI 传入异常深度delete_ai_junk_cmd/delete_multiple_ai_junk批量删除每个路径独立返回结果单条失败不影响其余。前端封装在 ipc/commands.ts实际实现见 ipc/commands.ts 的safeInvoke调用。界面侧AiCleanupView.tsx在删除前弹出ConfirmDialogL421把最终决定权交还给用户——引擎负责收敛候选集人负责最后确认。小结可复用的安全清理引擎清单如果你也想给工具加一个清理功能Dev Janitor 的做法可以浓缩成一张清单✅ 垃圾特征指向可再生产物缓存、历史、会话不指向配置与项目资产✅ 白名单在扫描、删除两个阶段各执行一次✅ 命中即剪枝保证结果去重且性能可控✅ 删除前独立终验符号链接、根/主目录、白名单、特征二次匹配✅ 深度上限钳制根目录 8 层、命令层 20 层控制爆炸半径;✅ 平台差异保留名、权限单独处理失败可分级重试✅ 用户确认弹窗作为最后一道闸。清理类功能的可靠性不来自识别得多准而来自每一层都可能出错时下一层还能拦住。这就是 Dev Janitor 清理引擎最值得借鉴的设计哲学。output文章 /output文章Wait, I made a typo above. Let me redo the final answer properly. 输出文章如何设计安全的文件清理引擎解析 Dev Janitor 的模式匹配、目录剪枝与防误删白名单策略Dev Janitor 是一款跨平台桌面应用用于清理开发残留、管理本地开发工具并检查常见环境问题。它的文件清理引擎在设计上有个核心原则宁可漏删不可误删。本文解析其模式匹配、目录剪枝与防误删白名单策略帮你理解一个安全清理引擎的分层设计思路。为什么安全删除是清理工具的第一问题开发环境里看起来像垃圾的文件和真正是垃圾的文件往往只差一层目录。比如.copilot/目录里既有可清理的会话缓存也有正在使用的配置文件。清理引擎一旦把两者混为一谈用户丢失的可能不是缓存而是数周的工作配置。Dev Janitor 的清理引擎源码集中在 ai_cleanup/mod.rs整体采用三层防线 删除前终验的架构模式匹配识别目标但刻意只打靶具体文件目录剪枝命中即跳过整棵子树避免重复报告白名单在扫描和删除两个阶段都兜底保护关键资产删除前终验删除动作单独再做一次完整校验。第一层模式匹配——只认垃圾特征不认目录名引擎定义了三类特征库全部是垃圾特征而非工具特征AI 工具残留模式AI_TOOL_PATTERNS在 ai_cleanup/mod.rs 中模式表精确指向各 AI 编程工具确定可再生的产物例如.aider.chat.history.md、.aider.tags.cacheAider 历史与缓存.copilot/session-state、.copilot/session-store.dbCopilot CLI 会话数据.qwen/.cache、.cline/cache、.windsurf等缓存目录一个关键细节check_ai_tool_patternai_cleanup/mod.rs对不带路径分隔符的模式只做文件名相等或以其开头匹配对带路径的模式才做后缀/包含匹配。这意味着它不会把整个.copilot配置目录当成垃圾——只有session-state、session-store.db这类会话目标会被命中。项目测试用例如 detects_copilot_cli_session_targets_without_config_noise专门验证了这一点配置目录保留会话缓存命中。临时文件模式TEMP_FILE_PATTERNS覆盖编辑器与系统的常见临时产物ai_cleanup/mod.rs.swp、.bak、.DS_Store、Thumbs.db等用文件名等于或以模式结尾的方式匹配。异常文件启发式check_anomalousai_cleanup/mod.rs 还有一组启发式规则零字节文件、可疑的单字符文件名、纯特殊字符命名。注意它给.gitkeep这类已知合法的空文件开了豁免——启发式规则同样要留白名单。第二层目录剪枝——命中即整棵跳过扫描主循环scan_targetai_cleanup/mod.rs在遍历目录时一旦命中白名单目录或垃圾目录就调用entries.skip_current_dir()直接剪掉整棵子树。这带来两个好处性能不再遍历已知无意义的深层内容去重一个垃圾目录只报告一次不会出现目录 目录里 10 个文件共 11 条重复结果。测试 reports_matching_directory_once_without_descendant_duplicates 专门锁定了这个行为。此外scan_ai_junkai_cleanup/mod.rs最后还按完整路径去重并用 rayon 并行扫描多个目标目录结果按大小降序排列——用户先看到的永远是最值得清理的大块头。第三层防误删白名单——关键资产永不进入视野白名单是扫描阶段的硬边界由is_whitelistedai_cleanup/mod.rs实现分两类白名单内容保护对象WHITELIST_DIRECTORIES.git、node_modules、target、venv等L110-L121版本库、依赖与构建产物WHITELIST_EXTENSIONSpdf、docx、psd、raw、zip等L100-L108文档、音视频、设计源文件、压缩包设计上有两层考量版本库和数据文件绝不被当垃圾.git被剪枝意味着清理引擎看不见仓库历史非代码资产优先保护psd、raw、cr2这类源文件一旦误删无法恢复白名单按扩展名一票否决。配合根目录扫描的深度钳制ROOT_SCAN_MAX_DEPTH 8ai_cleanup/mod.rs即使用户误选扫描盘符根目录引擎也会把目标收敛到用户主目录并限制递归深度把爆炸半径控制在最小。删除前终验validate_ai_junk_delete_target 的五道门扫描阶段说这可能是垃圾删除阶段则独立再验一遍。delete_ai_junkai_cleanup/mod.rs在执行删除前先调用validate_ai_junk_delete_targetai_cleanup/mod.rs过五道门符号链接拒绝canonicalize_existing_pathL298-L310检测到目标是符号链接时直接拒绝——防止指向别处的快捷方式绕过校验把链接目标删掉根目录与主目录拒绝is_root_or_home_pathL312-L321拦截对/和~的删除请求白名单复查删除路径再过一次is_whitelisted即使扫描结果被截断或缓存过期也有兜底二次特征匹配路径必须仍能命中 AI 残留、临时文件或异常规则之一否则报Path is not a recognized AI junk target拒绝执行平台级保留名拦截Windows 下额外拦截con、nul等保留名L502-L517。删除失败时还有分级重试Windows 下去只读属性后重试fix_permissions_and_deleteL566-L593Unix 下chmod补写权限后重试L596-L611。前后端如何协作命令通道与确认弹窗Rust 核心能力通过 Tauri 命令暴露给前端入口在 commands/ai_cleanup.rsscan_ai_junk_cmd接收路径与maxDepth并做了maxDepth.min(20)的硬上限钳制L12防止 UI 传入异常深度delete_ai_junk_cmd/delete_multiple_ai_junk批量删除每个路径独立返回结果单条失败不影响其余。前端封装在 ipc/commands.ts通过safeInvoke调用上述命令。界面侧AiCleanupView.tsx在删除前弹出ConfirmDialogL421把最终决定权交还给用户——引擎负责收敛候选集人负责最后确认。小结可复用的安全清理引擎清单如果你也想给工具加一个清理功能Dev Janitor 的做法可以浓缩成一张清单✅ 垃圾特征指向可再生产物缓存、历史、会话不指向配置与项目资产✅ 白名单在扫描、删除两个阶段各执行一次✅ 命中即剪枝保证结果去重且性能可控✅ 删除前独立终验符号链接、根/主目录、白名单、特征二次匹配✅ 深度上限钳制根目录 8 层、命令层 20 层控制爆炸半径✅ 平台差异保留名、权限单独处理失败可分级重试✅ 用户确认弹窗作为最后一道闸。清理类功能的可靠性不来自识别得多准而来自每一层都可能出错时下一层还能拦住。这就是 Dev Janitor 清理引擎最值得借鉴的设计哲学。赞分享【免费下载链接】Dev-JanitorCross-platform desktop app for cleaning development artifacts, managing local developer tools, and checking common environment issues.项目地址https://gitcode.com/gh_mirrors/de/Dev-Janitor点击查看免费下载相关推荐openGym 完全新手指南自托管健身追踪器的 3 种运行方式从浏览器试用到部署自己的服务器openGym 完全新手指南自托管健身追踪器的 3 种运行方式从浏览器试用到部署自己的服务器 openGym 是一款开源的自托管健身房与体重追踪器self后端前端移动开发MCP 服务Nginx UI Auth 配置指南IP 白名单、可信代理与登录安全策略Nginx UI Auth 配置指南IP 白名单、可信代理与登录安全策略 本指南系统讲解 Nginx UI 从 v2.0.0 beta.26 起引入的 aut后端前端运维认证鉴权从形状正则到显式白名单get-shit-done 安装器 3628 修复如何防止 Hook 误删从形状正则到显式白名单get shit done 安装器 3628 修复如何防止 Hook 误删 本文基于仓库变更集文档 3628 bundled hook人工智能AI 应用提示工程开发工具工作流自动化AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表