Skip to main content

mac-cleaner:安全的 macOS 清理命令行工具

·299 words·2 mins

GitHub 项目仓库:cleanmymac-shell

项目概述 #

mac-cleaner 是一个用 Shell 编写的轻量级 macOS 清理工具。

其目标非常简单:帮助用户收回磁盘空间,而不是将清理变成一种危险的“一键式”操作。与立即删除文件不同,mac-cleaner 遵循保守的、预览优先的工作流程。默认情况下,它以 dry-run(演练)模式运行,扫描常见的清理目标,并在移动任何内容之前展示可以清理的文件。

它可以检查旧的缓存、日志、崩溃报告、临时文件、开发人员遗留产物(developer artifacts)、包管理器缓存、大文件、应用程序、启动项,以及可选的清理区域(如下载目录、废纸篓、Docker 和 Xcode 归档)。

该项目围绕三个核心理念设计:

  1. 默认安全 —— 演练优先,无意外删除。
  2. 确认后操作 —— 用户可以在执行清理前检查待清理的候选对象。
  3. 可恢复的清理 —— 经批准清理的项目会被移至 ~/.Trash/mac-cleaner-* 下带有时间戳的文件夹中,而不是被永久删除。

该项目主要面向开发者和高级用户,他们更喜欢透明的命令行工具,而不是黑盒清理应用。它并不是要取代商业 macOS 维护软件,而是一个小型、可审计的 Shell 工具,适合那些想要确切了解到底清理了什么内容的人。

开发流程:AI 辅助,人类主导 #

fig-01-ai-assisted-human-led-development-workflow

该项目也是一次 AI 辅助软件开发的实验。

在此工作流中,我担任 产品经理兼项目负责人(Project Owner),负责产品方向、安全原则、功能范围以及最终的工程决策。

我将不同的 AI 工具视为一个虚拟软件小团队的成员:

  • OpenAI Codex 扮演 CTO 的角色,协助进行架构思考、实现策略、代码结构和技术权衡。
  • ChatGPT 扮演 UI/UX 设计师和技术编辑,帮助优化用户体验、命令行交互、文档和项目的对外宣传。
  • Google Antigravity 扮演 开发人员,协助实现功能、迭代 Shell 脚本并调试程序行为。
  • GitHub Copilot 扮演 DevOps 助手,协助维护仓库、自动化流程、发布工作流以及日常编码支持。

我还将 AI 的使用限制(额度限制)纳为工程工作流的一部分。当一个工具耗尽 Token、额度或使用配额时,另一个 AI 工具可以作为下一个可用的开发人员介入。

这使得整个开发过程减少了对单一模型或平台的依赖,更像是与一个灵活、轮值的 AI 开发团队合作。

最终的设计仍然遵循人类主导的工程流程。AI 工具加速了实现和代码审查,但项目方向、安全模型、清理规则和最终决策仍然是由人工审查并保持有意克制的保守态度。

安全尝试 #

在执行任何操作之前,请先使用 --dry-run

fig-02-mac-cleaner-coverage

使用示例:

curl -L https://github.com/cuicaihao/cleanmymac-shell/releases/latest/download/mac-cleaner.tar.gz -o mac-cleaner.tar.gz
tar -xzf mac-cleaner.tar.gz
chmod +x mac-cleaner
mkdir -p "$HOME/.local/bin"
mv mac-cleaner "$HOME/.local/bin/mac-cleaner"
mac-cleaner --help
mac-cleaner --dry-run

随着我不断细化清理规则、改进安全检查并添加更多以开发者为中心的维护工作流,该项目将继续演进。

真实运行演练 #

我在本地使用默认的演练(dry-run)模式测试了最新的发布版本:

curl -L https://github.com/cuicaihao/cleanmymac-shell/releases/latest/download/mac-cleaner.tar.gz -o mac-cleaner.tar.gz
tar -xzf mac-cleaner.tar.gz
chmod +x mac-cleaner
mkdir -p "$HOME/.local/bin"
mv mac-cleaner "$HOME/.local/bin/mac-cleaner"

mac-cleaner --help
mac-cleaner --dry-run

演练顺利完成,期间没有移动或删除任何文件:

✨ mac-cleaner v1.2.0
────────────────────────────────────────────────────────
Command:       scan
Mode:          Dry Run (Safe mode, preview only)
Age Threshold: > 14 day(s)
────────────────────────────────────────────────────────

== Cleanup plan ==
❯ User cache contents older than threshold [low risk]
  Note: Usually safe to regenerate. Apps may rebuild these files later.
  └── Total: 15.6 MiB  (6 items)

❯ Developer caches [medium risk]
  Note: Usually safe to regenerate, but the next build, package install, or simulator launch may be slower.
  └── Total: 173.4 MiB  (3 items)

Dry-run cleanup script written to: clean.sh
All rm -rf lines are commented. Review, edit, and run it yourself only if you are confident.

== Skipped optional groups ==
  Old Xcode archives: skipped. Use --include-xcode-archives to include Organizer archives older than the threshold.
  Downloads older than threshold: skipped. Use --include-downloads to include ~/Downloads.
  Trash: skipped. Use --empty-trash to include ~/.Trash.
  Docker cleanup: skipped. Use --include-docker to prune Docker caches and stopped resources.

📊 Final Summary
────────────────────────────────────────────────────────
Can be reclaimed:           9 items      189.0 MiB
Actually moved:             0 items            0 B
Scan time:                       less than 1s
────────────────────────────────────────────────────────

此输出反映了该项目的主要设计原则:预览优先、清晰审查,且默认避免破坏性的清理操作。