本文目录导读:

当然可以,以下是一个基于 Shell 脚本(适用于 Linux/Unix 系统)的通用方法,用于自动清理 3 天前的旧日志文件,脚本会删除修改时间早于 3 天的 .log 文件(或指定模式的文件)。
脚本示例:clean_old_logs.sh
#!/bin/bash
# 定义日志目录(根据需要修改)
LOG_DIR="/var/log/myapp"
# 定义日志文件匹配模式(*.log 或 *.txt 等)
FILE_PATTERN="*.log"
# 定义保留天数(3天前的文件将被删除)
DAYS_OLD=3
# 检查目录是否存在
if [ ! -d "$LOG_DIR" ]; then
echo "错误:目录 $LOG_DIR 不存在"
exit 1
fi
# 查找并删除指定天数前的文件
find "$LOG_DIR" -type f -name "$FILE_PATTERN" -mtime +"$DAYS_OLD" -exec rm -f {} \;
# 可选:删除空目录(如果日志文件按日期分文件夹)
# find "$LOG_DIR" -type d -empty -delete
echo "已清理 $LOG_DIR 中 $DAYS_OLD 天前的 $FILE_PATTERN 文件。"
使用方法
-
保存脚本
将上述代码保存为clean_old_logs.sh。 -
赋予执行权限
chmod +x clean_old_logs.sh
-
手动测试运行(建议先加
-print看看会删除哪些文件,确认无误后再执行删除)# 仅查看会删除哪些文件(不实际删除) find /var/log/myapp -type f -name "*.log" -mtime +3 -print # 实际删除 ./clean_old_logs.sh
-
设置定时任务(cron)
使用crontab -e添加一行,例如每天凌晨 2 点执行:0 2 * * * /path/to/clean_old_logs.sh > /dev/null 2>&1
重要说明
- 风险提示:
-exec rm -f {} \;会直接删除文件,请务必先在测试环境验证,或先用-print预览。 - 修改时间 vs 创建时间:
-mtime基于文件的最后修改时间,如果日志文件被持续写入,最后修改时间会不断更新,这可能导致文件永远不会被删除(如果你希望删除“创建时间”早于 3 天的文件,需使用-ctime或通过stat处理,但通常-mtime更符合实际需求)。 - 日志文件压缩:如果你有
.gz等压缩文件,可调整FILE_PATTERN或单独处理。 - 跨平台:该脚本基于 GNU find(Linux 标准),macOS 的 find 略有不同(
-mtime行为一致),但若使用-delete参数,macOS 的 find 也支持。
扩展:Windows 系统(PowerShell 脚本)
如果你在 Windows 上管理日志文件,可以使用 PowerShell:
# 定义路径和天数
$logPath = "C:\Logs"
$daysOld = 3
$filePattern = "*.log"
Get-ChildItem -Path $logPath -Filter $filePattern -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$daysOld) } |
Remove-Item -Force -Verbose
将脚本保存为 .ps1 文件,通过任务计划程序定时运行(注意 PowerShell 执行策略设置)。