删除除当前日志文件之外的所有日志文件

删除除当前日志文件之外的所有日志文件

我的 sip 服务器每小时生成 3 个日志文件:

Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log

所以我需要删除除当前小时日志之外的所有其他日志文件。我尝试使用这个命令

 find . -type f -name "*-23May2017-10-00hrs.log" -print

它打印了我当前时间的三个日志文件。

所以当我尝试此命令来验证与当前时间日志不匹配的文件时。

find . -type f -name "!(*-23May2017-10-30hrs.log)" -print

它没有给我任何东西。

如何删除我的其他日志文件?

答案1

find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm

答案2

首先:您的查找过程不会被转义,因此通配符*会被转换。为了防止这种情况,您可以使用反斜杠\或使用单引号'

所以: find . -type f -name '*-23May2017-10-00hrs.log' -print 应该可以正常工作。

回到你真正的问题:有几种方法可以解决这个问题。首先,您可以使用 find 的-mtime功能来侦听最后一次修改是 x 分钟前的每个文件。假设您的 sip 服务器登录于/var/log/sip/

find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print 将显示每个以 和 结尾的文件.log,最后一次修改是在 24*60 分钟(1 天)前。

但是,您也可以使用用于日志处理的工具,仅此而已logrotate

logrotate 在每个主要的 UNIX 发行版上都可用,并允许您在某个时间压缩文件,在另一个时间之前删除它们等等。功能列表很长。它易于安装,作为守护进程运行,您无需摆弄额外的 cronjobs。

我的建议是使用 logrotate。看看它的简单性:https://linux.die.net/man/8/logrotate

相关内容