在 macos shell 脚本中检查磁盘空间阈值,推荐用 df -p / 提取根分区使用率(去%后数值比较),配合 tail -1 和 tr -d '%' 确保准确;需用 -p 避免标题干扰,也可过滤 tmpfs 等虚拟文件系统监控多挂载点。
在 macos 的 shell 脚本中检查磁盘空间是否低于阈值,核心是用 df 获取可用空间或使用率,再通过数值比较触发判断逻辑。关键在于适配 macos 默认的 zsh 环境、正确提取字段、处理单位(如 g/b)、避开临时文件系统干扰。
获取根分区剩余空间(以 GB 为单位)
最常用也最稳妥的方式是查根目录 / 的可用空间(单位统一转为 GB),避免因挂载点名称变化或多个卷导致误判:
- 用
df -P / | tail -1确保只取根分区一行(-P启用 POSIX 格式,字段对齐稳定) - 用
awk '{print int($4/1024/1024)}'将可用空间(KB)转为整数 GB(macOSdf默认输出 KB) - 示例命令:
free_gb=$(df -P / | tail -1 | awk '{print int($4/1024/1024)}')
检查使用率是否超阈值(推荐用于预警)
相比绝对剩余空间,使用率更直观,且能提前发现小容量磁盘风险。注意去除 % 符号再比较:
- 提取使用率数字:
df -P / | tail -1 | awk '{print $5}' | tr -d '%' - 设阈值为 85,则判断写法:
if [ "$(df -P / | tail -1 | awk '{print $5}' | tr -d '%')" -ge 85 ]; then ... fi - 务必用
-P和tail -1,避免df头部标题行干扰
排除 tmpfs、apfs_snapshot 等干扰项
如果需遍历所有挂载点(比如监控 /Users 或 /Volumes 下的外置盘),要过滤掉虚拟文件系统:
- 加
grep -vE 'tmpfs|devfs|map.*|apfs_snapshot'排除非物理存储 - 再用
awk提取每行的使用率和挂载点:df -P | grep -vE 'Filesystem|tmpfs|devfs|map|apfs_snapshot' | awk '{sub(/%/,"",$5); if($5>=85) print "ALERT: "$1" at "$5"%"}' - 这样可一次性列出所有超限分区,适合日志记录或批量通知
脚本中完整判断结构示例
以下是一个可直接保存运行的 zsh 脚本片段(首行必须是 #!/bin/zsh):
#!/bin/zshTHRESHOLD=85usage=$(df -P / | tail -1 | awk '{print $5}' | tr -d '%')if [ "$usage" -ge "$THRESHOLD" ]; thenosascript -e 'display notification "磁盘使用率已达 '"$usage"'%" with title "空间警告"'fi











