最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
macOS 如何在 Shell 脚本中自动清理超过三十天的旧日志文件
时间:2026-08-11 09:58:49 编辑:袖梨 来源:一聚教程网
可用 find 命令配合 -mtime +30 清理三类日志目录(/var/log、/Library/Logs、~/Library/Logs),但需避开 Unified Logging 管理区(/var/db/diagnostics 等),并用 sudo log erase 操作;脚本支持预览与定时执行,兼顾安全与自动化。
直接用 find 命令配合 -mtime +30 就能精准定位并删除,但 macOS 日志结构分层明显,不能一刀切。重点清理三类路径,同时避开系统统一日志(/var/db/diagnostics)这类受 log 命令管理的区域,否则可能影响诊断功能。
明确可安全清理的目录范围
以下路径中文件大多无自动轮转机制,长期积累易占数 GB 空间:
-
/var/log/:系统级日志归档(如system.log.0.gz、install.log.old) -
/Library/Logs/:全局服务日志(Xcode、Apache、Homebrew 服务等) -
~/Library/Logs/:当前用户应用日志(Slack、Docker Desktop、VS Code 扩展等)
⚠️ 注意:/var/db/diagnostics 和 /var/db/uuidtext 属 Unified Logging 数据库,必须用 sudo log erase 操作,不可用 rm 直删。
脚本核心写法(保留最近30天)
保存为 clean-old-logs.sh,内容如下:
#!/bin/zshLOG_DIRS=( "/var/log" "/Library/Logs" "$HOME/Library/Logs" )
for dir in "${LOG_DIRS[@]}"; do if [[ -d "$dir" ]]; then echo "? 清理 $dir 中 30 天前的日志文件"
删除 .log 文件(非正在写入的)find "$dir" -type f -name "*.log" -mtime +30 -delete 2>/dev/null# 删除压缩归档和旧格式(.gz / .old)find "$dir" -type f ( -name "*.gz" -o -name "*.old" ) -mtime +30 -delete 2>/dev/nullfi done
echo " 清理完成。建议运行 'du -sh /var/log /Library/Logs ~/Library/Logs' 查看空间释放效果。"
? 关键说明:
-
-mtime +30表示“修改时间超过 30 整天”,即至少 31 天前的文件 -
2>/dev/null屏蔽权限不足等无关报错,保持输出干净 - 运行前可先用
-print替代-delete预览将删哪些文件,例如:find "$dir" -type f -name "*.log" -mtime +30 -print
搭配系统级日志管理更省心
单靠脚本是治标,还需启用 macOS 原生机制减少源头产出:
- 执行
sudo log config --mode "level:default,mode:stream"确保 Unified Logging 正常工作 - 对常用开发工具(如 Docker、Node.js 进程),启动时加
--log-level=warn或配置其自身日志保留策略 - 检查
/etc/newsyslog.conf是否启用轮转(默认开启),避免/var/log下日志无限膨胀
定时执行只需一条 cron
让脚本每月1号凌晨自动跑一次:
crontab -e# 添加这一行:0 3 1 * * /path/to/clean-old-logs.sh >/dev/null 2>&1
其中 0 3 1 * * 表示每月1日 3:00 执行;/path/to/... 替换为你脚本的实际路径;重定向确保不产生邮件通知。
不复杂但容易忽略细节,关键在区分日志类型、留出预览步骤、再配好定时节奏。
相关文章
- 洛克王国世界PVP纯火队配队攻略 08-11
- 依露希尔星晓哪个公司的游戏 依露希尔星晓游戏玩法分享 08-11
- 帝国史诗武器推荐有哪些 08-11
- 云原神网页版入口位置分享 08-11
- 《归零巡礼:亡谍镇魂曲》致命镜头成就攻略分享 08-11
- 依露希尔星晓专武如何获取 依露希尔星晓专武获取攻略 08-11