Mole 如何从 Shell 脚本长成 Mac 应用
很多年来,我一直留着一份私人 shell 脚本,只用来清理 Mac。
我喜欢电脑保持轻快,所以像照料花园一样反复打磨它,从 500 行写到 2000 多行。2025 年 10 月,磁盘又满了。我试了几款知名清理软件,效果都不明显,最后运行自己的脚本,一次清掉几十 GB。
这件事值得分享出去。
当时我在三亚度假,坐在酒店泳池边,决定把脚本做成开源命令行工具。鼹鼠前肢有力,擅长钻进地下寻找东西,正像这份脚本会深入 macOS 容易堆积杂物的角落。所以它叫 Mole。第一个版本的横幅写着「can dig deep to clean your Mac」,直到今天也没变。
社区把它带到了更远的地方
最初只期待有几百位用户。六个月后,GitHub 仓库超过 5 万颗星。更重要的是,用户提交了约 500 个 issue,补充我从没见过的清理路径,社区贡献了约 300 个功能 PR,世界各地约 100 位开发者成为贡献者。
每台开发电脑都会在不同位置留下构建产物,社区绘出的地图远比我一个人更完整。
覆盖变广也带来更难的一课:每增加一个清理目标,就增加一个误删位置。路径清单远远不够,还需要统一路径保护、受保护目录、活动进程检查、超时、操作前检查,以及锁住拒绝边界的测试。
社区不只增加了功能,也迫使一份私人脚本长出通用的安全模型。
真正让我意识到规模的,是一张账单。README 里两张截图通过 Vercel CDN 提供,有一周消耗了 60 TB 流量,我因为两张图片欠了 80 美元。
为什么又做 Mac 应用
很早就有用户说:父母想用,妹妹想用,但他们永远不会打开终端。
我把想法搁置了几个月,因为命令行版还不够成熟。到 2026 年春天,基础终于稳了。我用几个周末完成应用,并在 2026 年 5 月 11 日晚发布 Mole for Mac。早鸟价 9 美元,覆盖两台 Mac,终身更新,算是感谢一路测试命令行版的用户。
应用不能只是调用脚本的按钮。图形工具要把发现与删除分开,支持取消,解释权限,在扫描时保持窗口稳定,还要给从未读过 shell 命令的人一份可检查、可恢复的计划。
命令行版告诉应用该找什么,应用则迫使整个过程变得可见、可中断。
五颗行星
它本可以只是一个带清理按钮的菜单栏工具。但世界上已经有太多 AI 生成的杂物软件。既然要投入 token,我希望最后得到的是一个让人舒服的东西,而不是又一件污染时间线的产品。
小时候我喜欢看行星。十年前刚学前端时,最想学 WebGL,也是为了画它们。做这款应用,终于让两件事碰到一起:
- 「清理」是地球,山间雨水洗去旧尘
- 「软件」是火星,红色沙土掩埋旧痕
- 「优化」是水星,离太阳最近,飞得最快
- 「分析」是木星,拥有最辽阔的眼睛
- 「状态」是太阳,从不休眠的光
行星纹理取自天文影像,地球参考了 NASA 的蓝色弹珠。每颗行星都换过十多次,旋转方向和相对速度参照真实天体,操作完成时的小小飞行效果也是如此。
严格来说,这和鼹鼠没有太大关系。更像是一只地下的小动物,从洞口抬头看见很大的天空,然后安静下来。
发布那一晚
晚上十点左右,我发布了应用。朋友们转发后,手机开始大约每十秒震一次,提示新的购买。订单来自法国、德国,还有我没见过的货币。iPhone 只是显示通知,就热得不停掉电。
我关掉邮件提醒去睡觉,第二天早上订单还在来。不少人只是因为命令行版曾经善待他们,就愿意购买 Mac 应用。
应用还有不少空缺。很感谢大家愿意为一个漂亮的小玩具付费,也愿意等我慢慢补齐。
我喜欢让事情按自己的节奏成熟。Mole 花了很多年,从私人脚本走到开源命令行工具,再走到付费应用。整段路上,最珍贵的是长期迭代,以及与世界各地开发者建立的友谊。这些比销售数字更值得记住。