删除较旧的日志文件

删除较旧的日志文件

有一些日志文件是在一定时间后创建的,带有时间戳。

/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您可以使用croncrontab -e编辑 crontab)每天运行以下脚本:

olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"

相关内容