有一些日志文件是在一定时间后创建的,带有时间戳。
/mylog/path
Log_file_2018-07-19-22-55-31Z.tgz
Log_file_2018-07-20-01-29-11Z.tgz
Log_file_2018-07-20-10-36-49Z.tgz
Log_file_2018-07-21-18-26-36Z.tgz
我需要根据日期删除旧日志。例如,我只想要最近 5 天的日志,并且应删除较旧的日志。每天创建的日志文件数量各不相同。如何实现这一目标?
答案1
您可以在命令中使用 mtime
(修改时间) 。find
find /mylog/path -mindepth 1 -mtime +5 -delete
-mindepth 1
表示处理除命令行参数之外的所有文件。-mtime +5
将检查 5 天前修改的文件。-delete
将删除
答案2
由于您的发现没有该-mtime
选项,我认为这是最简单的方法:
#!/bin/bash
# delete every file that's between 5 and 40 days old
for i in {5..40}; do
olddate=$(date --date="$i days ago" +%Y-%m-%d)
echo "Deleting files from $olddate..."
rm "Log_file_$olddate-*"
done
如果你总是想要在日志文件过期五天后将其删除,但由于某种原因不想使用,logrotate
您可以使用cron
(crontab -e
编辑 crontab)每天运行以下脚本:
olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"