Mole自动化实战:JSON与NDJSON输出对接脚本的完整指南
【免费下载链接】Mole🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole
Mole 是一款免费开源的 Mac 清理优化工具(CLI 命令为mo),它不仅能一键清理缓存、卸载应用残留,还支持将磁盘分析与系统状态以JSON / NDJSON 格式输出,方便你用脚本对接自动化监控与告警。本文带你从零上手:如何用mo analyze --json、mo status --json和--watch流式输出,把 Mac 清理工具变成可自动化的运维脚本。
为什么 JSON 输出对自动化至关重要
新手使用mo时,通常面对的是漂亮的终端交互界面(TUI)。但当你想让 Mac 清理脚本跑在后台、定时执行、或接入监控系统时,人类可读的界面就没用了——机器需要的是结构化的 JSON。
Mole 的自动化能力体现在三处源码中,你可以按图索骥:
- 磁盘分析 JSON 输出:cmd/analyze/json.go
- 状态面板 JSON 输出:cmd/status/main.go
- NDJSON 流式输出:cmd/status/watch.go
三种 JSON 输出模式:从入门到进阶
Mole 提供了三种由浅入深的 JSON 对接方式,新手按顺序体验即可。
模式一:一次性 JSON 报告(--json参数)
最直接的用法是给命令加上--json参数,它会跳过界面,直接输出一份完整 JSON:
mo analyze --json ~/Documents # 磁盘占用报告 mo status --json # 系统健康快照 mo history --json # 清理历史审计其中mo analyze --json会输出扫描路径、每个条目的大小、是否可清理(cleanable字段)、大文件列表(large_files)和总占用(total_size)等字段,结构定义见 cmd/analyze/json.go。拿到后可以直接用jq提取字段,例如:
mo status --json | jq '.health_score' # 查看健康分 mo analyze --json ~/ | jq '.total_size' # 查看总占用(字节)模式二:管道自动转 JSON(免参数黑科技)
这是 Mole 一个非常贴心的设计:当输出被管道(pipe)接走时,mo status会自动切换到 JSON 模式,无需任何参数。判断逻辑在 cmd/status/main.go 中——只要 stdout 不是字符设备,就输出 JSON。
也就是说,mo status | jq '.cpu.usage'这样一条命令就能直接在脚本里取到 CPU 使用率,写 Shell 脚本时可以少记一堆参数。
模式三:NDJSON 流式输出(--watch持续采样)
NDJSON(Newline Delimited JSON)就是"每行一条独立 JSON"的格式,天生适合流式消费。mo status --watch会由一个常驻采集器持续输出快照,每行一个完整 JSON:
mo status --watch --interval 2s # 每 2 秒输出一行状态快照其源码 cmd/status/watch.go 中有两个为脚本对接而做的设计值得了解:
- 首行立即可用:第一个快照立即输出,消费方不用干等一个间隔周期;
- 父进程退出即停:当管道断开(父进程消失)时干净退出,不会留下僵尸进程。
在脚本里,你可以逐行读取并做阈值告警:
mo status --watch --interval 2s | while read -r line; do mem=$(echo "$line" | jq '.memory.used_percent') [ "$mem" -gt 90 ] && echo "内存告警: ${mem}%" done清理审计:用mo history --json留痕
清理类工具做自动化,审计是绕不开的一环。mo history --json会把每次清理会话(命令、起止时间、条目数、释放空间、失败任务数)和删除明细(时间戳、模式、大小、路径)都结构化为 JSON,渲染逻辑在 lib/core/history.sh 中。
典型用法是定期归档清理报告:
mo clean --dry-run # 先预览要清理什么(推荐养成习惯) mo history --json > cleanup-$(date +%F).json # 归档本次清理审计实战:一个 10 行的磁盘守护脚本
把前面的知识组合起来,一个实用的磁盘守护脚本长这样(#!/usr/bin/env bash开头,保存为mo-guard.sh后可加入定时任务):
#!/usr/bin/env bash # 磁盘剩余空间低于 20GB 时发送系统通知 free_gb=$(mo status --json | jq '.disks[0].free / 1073741824 | floor') if [ "$free_gb" -lt 20 ]; then osascript -e "display notification \"剩余 ${free_gb}GB\" with title \"Mole 磁盘告警\"" fi再配合mo analyze --json / | jq '.entries | map(select(.cleanable))'找出可清理项,自动化闭环就形成了:检测 → 定位 → 清理 → 留痕。
输出字段速查与进阶提示
| 命令 | 输出形态 | 典型用途 |
|---|---|---|
mo analyze --json <路径> | 单个 JSON 对象 | 磁盘占用报告、大文件定位 |
mo status --json | 单个 JSON 对象 | 健康分、CPU/内存/磁盘快照 |
mo status --watch | NDJSON 流 | 持续监控、实时告警 |
mo history --json | 单个 JSON 对象 | 清理审计、定期归档 |
几个进阶小贴士:
- 进程告警可配置:
mo status支持--proc-cpu-threshold与--proc-cpu-window参数,用于识别持续高 CPU 占用的进程,详见 cmd/status/main.go; - 僵尸进程字段是只读诊断:
zombie_count、zombie_parents等字段仅供观察,不会影响健康分,也不终止进程; process_stale字段要留意:快速快照会复用最近一次成功采样的进程数据并标记为true,做严谨告警前建议先判断该字段;- JSON 与界面行为可能略有差异:概览模式中大小为 0 的条目会在 JSON 里被省略(与界面行为一致),解析脚本无需特殊处理。
总结
Mole 的自动化三板斧非常清晰:--json拿一次性报告、管道自动转 JSON 简化脚本、--watch输出 NDJSON 做持续监控。再配合mo history --json的清理留痕,一条 Mac 清理与监控的自动化流水线就搭建完成了。更多细节可参考 README.md 中 "JSON, NDJSON, and process alerts" 章节。
【免费下载链接】Mole🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考