我的 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