有段时间,我几乎是每两周就跟自己的 Mac 吵一次架。
Xcode、Node、各种容器镜像,你懂的——硬盘红条越来越长,风扇一叫,我就开始手动 du -sh * 到处翻垃圾。
后来在 GitHub 上看到 tw93 的 Mole[1],这个项目在 macOS 清理这个赛道上,算是把开发者那点“洁癖”和“控制欲”都拿捏住了。
一只“鼹鼠”,干了几件事
先把它干的事情浓缩一下:
- • 系统深度清理:用户级缓存、日志、Trash、浏览器缓存、Xcode 派生数据、Node.js 缓存等一口气全扫。
- • 智能卸载:不是删掉
.app就完事,而是去 20 多个常见路径把关联的配置、插件、日志都拔干净。 - • 磁盘分析:像命令行版 DaisyDisk,用方向键在目录树里钻来钻去,盯着大文件一个个决断。
- • 权限体验:用
mo touchid把 sudo 和指纹绑一块,不用每次输一大串密码。
所有这些,都包在一个终端命令 mo 里。对习惯了 CLI 的开发者来说,这才是“原生工作流”。
为什么不用 CleanMyMac 这种现成的?
坦白讲,CleanMyMac 这种工具,对普通用户挺友好的。
问题是:
- • 黑盒;你不知道它具体删了哪条路径,只能看几行营销文案。
- • 个性化能力差;比如你想保留 Playwright、HuggingFace 的缓存,图形界面里很难精确到路径级别。
- • 作为开发者,你会本能怀疑:它到底动没动不该动的地方?
Mole 的路线完全反着来:
- • 开源 Shell,所有逻辑都摊在那,你不放心就自己打开脚本看。
- • 清理规则基于“路径 + 目录约定”,比如
~/Library/Caches、DerivedData、node_modules等,不碰用户文档。 - • 提供
--dry-run和--whitelist,先预览,再让你自己决定删不删。
对很多人来说,这种“我知道你要干什么”的透明感,本身就降低了心理阻力。
深度清理:它到底在删什么
mo clean 这条命令背后,其实就是一堆精心挑过的路径。
作者把常见“垃圾大户”分了组:
- • 系统基本项:用户应用缓存、应用日志、Trash。
- • 浏览器:Chrome / Safari 的缓存目录。
- • 开发工具:Xcode 的 DerivedData、构建缓存,Node.js 的包缓存等。
- • 其他:Dropbox、Spotify 这类客户端的本地缓存。
你一按回车,它会先统计每一组的体积,然后给出清单和释放空间的估算数字。
更关键的是:加上 --dry-run,这一步只做“演习”,不会真的删除。
风险控制就体现在这里:
- • 不搞“全自动一键魔法”,永远给你一个可读列表。
- • 想保护特定缓存,就用
--whitelist把路径加进去,默认已经帮你保护了 Playwright、HuggingFace、Maven 这些重度开发者常用的目录。
相当于你拿到的是一份可编辑的“清理剧本”,而不是被强行安排的“系统保洁服务”。
卸载:拖进废纸篓远远不够
很多人还停留在“应用➝拖进废纸篓”的时代。
但只要你用过 AppCleaner 之类的工具,就会知道,一个 App 的残留能分布在十几个地方:
- • Application Support
- • Caches
- • Preferences
- • Logs
- • WebKit / HTTPStorages
- • Internet Plug‑Ins,甚至
/Library下的守护进程。
mo uninstall 做的事情,就是把这种路径知识系统化。
- • 先列出当前系统里的 App,包含体积、最近使用情况。
- • 你选中一个,它就去预设的 20 多个路径里查找“同名”或相关前缀的文件夹和配置。
- • 匹配到的全部打包清掉,最后给一份“清理了多少文件、释放了多少空间”的结果。
这套逻辑本质上不复杂,但价值在于:
- • 把“路径知识”从个人经验提取成了脚本规则。
- • 可见、可改,你完全可以根据自己项目栈再补一批路径。
这就是开源工具对开发者的意义:
它不替你做选择,只是把“脚手架”和“经验”放好了。
磁盘分析:为什么不用 Finder 自己看
硬盘快满的时候,大家第一反应都是“我去 ~/Downloads 把旧 DMG 删一删”。
问题是:
- • 你看得到的大文件,往往不是最大的;
- • 真正吃空间的,很多藏在
~/Library或某个项目的node_modules里。
mo analyze 就是给这件事一个稍微专业一点的入口:
- • 选一个目录(默认用户目录),做体积统计,按树状结构展示。
- • 用键盘上下左右在目录树里钻,看到“某个目录 40GB,其中 Caches 占了 28GB”这种信息,再决定要不要自己动手删。
这是一个很典型的“命令行 TUI”思路:
你完全可以把它当作 CLI 版的 DaisyDisk 来研究——输入是 du 一类的统计,输出是一层层可展开的树,交互靠键盘事件驱动。
Touch ID + sudo:一个小但舒服的点
有个细节很讨喜: mo touchid。
它的目的是把 sudo 的授权方式和 Touch ID 绑在一起——这样当 Mole 需要删除某些系统级路径、调用需要 root 的命令时,你只要伸手按一下指纹,不用在 Terminal 里一遍遍输密码。
这个功能本身不新鲜,很多人自己改过 /etc/pam.d/sudo 做类似事情。
但 Mole 把它包装成一个命令,对大部分不想研究 PAM 配置的用户来说,就是“按一个键,享受成果”。
写在最后:为什么值得开发者读一读源码
如果你只是想找一个“帮我清理垃圾”的工具,那到这里就够了。
但如果你是开发者,稍微花点时间把 Mole 的脚本翻一遍,会看到很多值得学习的点:
- • 如何组织一套安全的“文件删除规则”:明确边界,只动缓存和派生数据,不碰用户资产。
- • 如何在命令行里做“半自动”的交互,而不是一味自动化;给用户留最后一步判断。
- • 如何把本来零散的需求(清理、卸载、分析、权限体验)聚合成一个统一的 CLI 接口。
Mole 现在还在迭代,作者也明确提醒:对特别关键的工作机,先从 mo clean --dry-run 开始,用一段时间再大胆放权。
这点克制,说实话,比那些动不动就一键“优化 187 项”的工具,可信多了。
引用链接
[1] Mole: https://github.com/tw93/Mole
