用途
Disk Cleanup 用于扫描并清理 macOS 上的缓存、包管理器数据、崩溃转储和应用缓存,以回收磁盘空间。其设计强调确定性:所有目标知识集中在 targets.json 配置注册表中,测量与删除逻辑分别由两个脚本承担。
主要能力
- 只读调查:
python3 scripts/survey.py测量大小、风险、标记和未分类项,不触碰任何文件;加--json输出机器可读结果。 - 清理执行:
python3 scripts/clean.py默认 dry-run,仅打印计划;加--go才执行。支持按预设(safe/full)、按 ID、按跳过项选择目标。 - 风险分级:safe 自动运行;medium 需
--allow-medium;never 即使按 ID 指定也会被拒绝;advisory 仅打印指引,从不执行。 - 路径预检:每个进入回收站的路径需经 realpath 解析、位于 allowed_roots 下、非符号链接,且不能是 $HOME 或 /,否则跳过并报告。
- 删除方式:所有文件移除使用
trash,从不使用rm;释放的空间停留在废纸篓,直到清空(--empty-trash或用户手动清空)。 - 注册表维护:通过编辑 targets.json 增改目标,无需改代码。支持 trash、find-trash、command、simctl、downloads-scan、advisory 等方法。
- 个性化配置:config.json 提供通用默认值;个人或机器特定内容放入 config.local.json(gitignored),列表取并集,标量覆盖。
使用方式
脚本可无依赖(仅标准库)在终端直接运行:
python3 scripts/survey.py # 只读:大小、风险、标记、未分类
python3 scripts/survey.py --json # 同上,机器可读
python3 scripts/clean.py --preset safe # DRY-RUN 计划(默认,不删除)
python3 scripts/clean.py --preset safe --go # 执行(仅 safe 风险)
python3 scripts/clean.py --preset full --allow-medium --go --empty-trash
python3 scripts/clean.py --ids cargo-registry-cache,go-mod-cache --go
python3 scripts/clean.py --preset safe --skip ollama-models --go
智能体工作流:先运行 survey.py --json,转述压缩摘要(磁盘剩余、safe/medium 可回收总量、flags、主要目标),不要倾倒完整 JSON;对普通“清理安全内容”请求,展示 safe 总量并运行 clean.py --preset safe --go(可提供 --empty-trash);仅在 medium 目标、未分类发现、advisory 提示、Docker/模拟器决策时升级给用户判断。
适用场景
- 需要回收 macOS 磁盘空间,且希望清理过程可预测、可审查。
- 希望先查看清理计划再决定是否执行。
- 需要区分安全可再生成缓存与需人工确认的 medium 目标(如 ML 模型、设备支持、项目 node_modules)。
- 需要处理崩溃转储、包管理器缓存、应用缓存、Downloads 扫描等。
限制
- 仅面向 macOS。
- 大小基于
du估算,在 APFS 上为近似值。 - Docker 清理仍需智能体驱动,需用户按名称选择或使用
docker system prune -a -f;命名卷删除即数据丢失,需按名称确认。 - 从不调用
mo(TUI-only,即使 dry-run 也会阻塞等待真实终端)。 - 安装的软件应保持
risk: never(如 uv/tools、uv/python、~/.rustup/toolchains、~/.bun、~/.deno 并非缓存)。 - 非 advisory 目标的路径必须位于 allowed_roots 下,否则预检会拒绝。
- 每台机器的路径(allowed_roots、node-modules-projects 的查找根 ~/ai_projects)为示例,需按用户布局调整;不存在的目标测量为 0 并跳过。
- config.local.json 永不提交。