免责声明:本文记录包含真实删除文件的命令。删除不可逆(部分场景可走回收站)。如果你想跟做:先备份重要数据;每条删除命令先以只读或 dry-run 模式执行,并人工审查文件清单;删除前逐条确认。Agent 负责扫描、汇总与执行,删除的最终决定权与全部责任在使用者本人。文中工具均为第三方免费/开源软件,与作者无利益关系。
开头:C 盘红了
9 月 17 日,这台 Windows 11 的 C 盘可用空间剩 7.02GB(总 475GB,使用率 99%),E 盘剩 11.7GB(总 476GB,使用率 98%)。

浏览器更新包下载到一半失败。常规操作是打开某安全卫士一键清理,这次换了个做法:让 Agent 来干。
但不是一句「帮我把空间清出来」然后放权。边界先划死:
- Agent 负责体力活:选型调研、下载工具、只读扫描、解析输出、聚合统计、写测评报告
- 人负责所有删除的拍板:删什么、按什么规则删、什么时候删
整个流程里,Agent 没有不经确认删过一个文件。
一、工具选型:先分工,再选工具
清理磁盘其实是两类活:
- 系统盘(C:)的缓存与垃圾:规则库驱动,要的是「扫得准、删得稳、有审计」
- 数据盘(E:)的重复文件与残留:算法驱动,要的是「内容级判定、可编程、跨盘符」
Agent 给出的候选清单与分工:
| 工具 | 类别 | 分工 | 许可 |
|---|---|---|---|
| MangoDisk 1.1.2 CLI | 缓存清理 | C 盘缓存与垃圾 | GPL-3.0 |
| czkawka 12.0.2 CLI | 重复/空目录/大文件 | E 盘去重与整理 | MIT |
| Bulk Crap Uninstaller 6.3 | 卸载器 | 全机卸载残留盘点 | 开源 |
| BleachBit / dust / ncdu / fclones / DISM | 备选 | 本次未启用 | 开源 |
下文只展开实际启用的三个。
二、系统盘缓存:MangoDisk CLI
MangoDisk(Tauri 2 + Rust,GPL-3.0)本是桌面应用,本次用的是它的 CLI。
流程两步,先只读后执行:
# 只读扫描(不改任何文件)
./MangoDisk-1.1.2-windows-cli.exe clean --format json --include-full-paths --no-progress
# 实际清理(仅推荐集,人工确认后才执行)
./MangoDisk-1.1.2-windows-cli.exe clean --apply --selection recommended --yes --format json --include-full-paths --no-progress
结果:
| 指标 | 数值 |
|---|---|
| 只读扫描耗时 | 约 95 秒 |
| 推荐清理集 | 31 条规则 / 约 22.2GB |
| 实际释放 | 19.58GiB(预期 19.60,达成 99.9%) |
| 处理文件项 | 72,054 项,失败 116 项 |
| C 盘可用空间 | 8.7GB → 28GB |
最大单项是 uv(Python 包管理器)缓存 14.95GB,其次是 DirectX 着色器缓存 3.96GB、Adobe 媒体缓存 491MB。
安全设计是这个工具的强项,五点值得记录:
- 默认只读,
clean不带--apply不动任何文件 - 非交互终端强制要求
--yes,实测缺参返回错误码 4 - 清理前扫描运行中的进程,被占用的规则整条 blocked 并列出进程名(chrome.exe、msedge.exe 都在列)
- 每条规则带风险分级:
safe(纯临时文件)/recoverable(可再生缓存,有重新下载成本) - 清理记录落盘 history.json,可审计;规则库是开源的声明式 TOML,每条规则可追溯
对国产应用的覆盖是意外亮点:微信渲染缓存清了 285MB、腾讯会议 69MB、企业微信 0.26MB——且只动渲染与诊断缓存,聊天记录和接收的文件完全不碰。清理工具若误碰微信聊天文件就是事故,这条边界划得对。
三、数据盘去重:czkawka CLI
E 盘是数据盘,476GB 用了 98%。MangoDisk CLI 固定只扫系统盘,这一块交给 czkawka(Rust,MIT)——一个内容级去重工具,用 BLAKE3 哈希判定「内容相同」,而不是文件名或尺寸。
命令与结果:
| 扫描项 | 耗时 | 结果 |
|---|---|---|
| 重复文件(尺寸预筛) | 12.6s | 196,332 个候选 / 63,285 组(候选,非可删) |
| 重复文件(哈希精确) | 8 分 14 秒 | 51,921 个冗余副本 / 33,006 组 / 可回收 18.84GiB |
| 空目录 | 7.0s | 应用宝、迅雷等残留空目录 |
| 大文件 TOP30 | 3.8s | 最大 1.75GiB,顺带暴露模拟器双份虚拟磁盘 |
| 临时文件 | 3.5s | 一批 macOS 残留 .DS_Store |
Agent 没有直接信工具自报的数字,而是写了个十几行的聚合脚本,从 JSON 原始记录独立重算:20,226,656,219 字节 = 18.84GiB,与工具自报完全一致;「51,921 冗余副本 = 组内文件 84,927 − 组数 33,006」,口径自洽。不信工具的汇总,用自己的代码复算一遍,这是 Agent 干这类活的基本动作。
重复重灾区 TOP5:
| 目录 | 冗余量 | 典型原因 |
|---|---|---|
| E:\Game | 5.89GiB | 五个游戏共用同一版 nw.dll(80.5MB×5) |
| E:\MC | 3.94GiB | Minecraft 多版本整合包 |
| E:\Program Files | 2.77GiB | 模拟器组件整套双份(system.vhd 1.61GiB) |
| E:\Code | 2.57GiB | 项目里复制的 SDK/zip |
| E:\STEAM | 1.29GiB | 游戏资源 |
四、卸载残留:Bulk Crap Uninstaller
第三条线是卸载残留。Bulk Crap Uninstaller(开源)扫出全机 522 个卸载程序、合计 442.41GB,其中筛出 16 条「卸载程序丢失」的孤儿条目,合计 13.54GB——程序本体早已不在,注册表里的卸载入口还挂着。

这类条目删的是注册表残留,不删硬盘文件,风险低但脏活。逐条人工过目后批量处理。
五、Agent 踩的坑(本篇最有价值的部分)
工具测评的完整笔记会另发,这里只挑 Agent 实际撞上的四个坑。
坑一:czkawka 的退出码会撒谎。
对「文件名不同、尺寸相同、内容不同」的文件执行去重扫描,正确结论是「无重复」。czkawka 的输出确实是「Not found any duplicates.」,退出码却是 11——而 11 在有真重复时也是 11。为了实锤这个缺陷,Agent 自造了一对同尺寸不同内容的文件(f1、f2,各 1MB,哈希人工复核不同),复测依旧:输出无重复,退出码 11。
根因是退出码反映的是中间阶段(同尺寸候选存在),不是最终哈希判定。任何写 czkawka dup && 后续动作 的脚本,遇到分卷压缩包、固定长度记录这类「同尺寸不同内容」的常见文件必然误报。结论:脚本化使用不能信它的退出码,必须解析 JSON。
坑二:「保最新」的删除策略不懂哪份是正本。
czkawka 的 -D AEN(保留组内最新)在 dry-run 里给出的计划包括:删除正在使用的 Telegram.exe 主程序,保留更新器临时目录里的副本。内容等价没错,位置语义荒谬。在软件目录里,「保最新」是危险的默认——正确姿势是程序目录改用硬链接(-D HARD),文档/下载目录才用删到剩一份。
坑三:MangoDisk 的两档选择表达不了真实需求。
--selection 只有 recommended 和 all 两档。本机 all 比 recommended 多 16.3GB(pip 5.7G、gradle 5.2G、npm 1.4G、JetBrains 1.5G……),但 all 里混着项目内的 target/、dist/ 构建产物,删了伤增量构建。理性的选择是「清包管理器缓存、留项目构建产物」,CLI 表达不了这个集合。最终决策:本次只执行 recommended,开发缓存留给各工具原生命令(pip cache purge 等)。
坑四:先干 92 秒活,再报错。
非交互模式下缺 --yes,MangoDisk 会先跑完完整扫描(实测 92 秒)才返回错误码 4。参数校验本可以毫秒级完成。Agent 第一次验证防护逻辑时就白付了一次全盘扫描。
六、结果与遗留
| 目标 | 结果 |
|---|---|
| C 盘缓存(MangoDisk) | 实删 19.58GiB,可用空间 8.7GB → 28GB |
| E 盘重复文件(czkawka) | 鉴别出 18.84GiB 上界;分三档处置(见下) |
| 卸载残留(BCU) | 盘点出 16 条孤儿条目 13.54GB,逐条人工过目 |
| 空目录 / .DS_Store | 顺手项,量小 |
E 盘的 18.84GiB 是上界,不是能删的量。内容相同不等于可以删——五个游戏目录里各有一份 nw.dll,删任何一份都会破坏对应游戏。最终按三档处置:
- 低风险直接删(约 3.4GiB):模拟器组件缓存的双份镜像、更新器临时残留
- 人工挑选:同一份 PPTX 的 4 个副本散在三个目录,哪份是终稿只有人知道
- 改硬链接(可再省 5~8GiB,待做):游戏 DLL 与整合包,硬链接保留所有路径且省空间
原始产物全部留档:两次扫描的 JSON、删除计划、聚合脚本、测评笔记、前后截图,共一个目录。出了问题可回溯。
七、让 Agent 干这类活的六条规矩
- 只读先行。任何清理工具先跑只读扫描,人看完报告再谈删除
- dry-run 人审。删除类操作必须有 dry-run 模式,清单逐条过目——czkawka 的 dry-run 就是在这一步拦下了「删正本留副本」的荒谬计划
- 分级删除。低风险(纯临时文件)可批量;中风险(可再生缓存)看重新下载成本;高风险(程序目录、项目产物、文档)逐条人工判断
- 不信退出码,解析 JSON。两个工具都在退出码上有缺陷,唯一可靠的是机器可读输出里的逐条状态
- 独立复核。Agent 自己写脚本重算工具的汇总数字,对上了才采用
- 全程留档。扫描结果、删除计划、执行结果、复核脚本,一个目录全存——这是「Agent 干活」与「黑箱一键清理」的本质区别
这六条的共性只有一条:Agent 的输出永远是建议,删除键在人手里。
工具清单
- MangoDisk(GPL-3.0):https://github.com/harry0703/MangoDisk
- czkawka(MIT):https://github.com/qarmin/czkawka
- Bulk Crap Uninstaller(开源):https://github.com/Klocman/Bulk-Crap-Uninstaller




发表回复