如何删除基于30天以上且基于名称的文件夹

时间:2018-01-09 19:13:58

标签: bash ip

我有一个Syslog服务器,我从互联网上收集日志文件。我的配置根据传入的IP地址创建一个新文件夹和Syslog文件。

所以在我的/ var / log文件夹中我有IP地址的文件夹

  • 123.234.124.123
  • 123.234.14.13
  • 123.22.124.123等..

我有一个命令会将它们全部删除,但它不够具体

rm -fr `ls | grep -E [0-9]{3}`

如果我的目录是" 345"这太松了它不应该被我的脚本删除。

我试过了

rm -fr `ls | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

但我认为语法不正确。一旦我有它只删除像IP地址的文件夹,我将在文件夹的年龄工作。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为类似的事情应该这样做。除了查找具有IP类型名称的目录外,它还将仅删除超过30天的那些目录。

find . -type d -regextype egrep -regex "./[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" -mtime +30 | xargs rm -rf

参数说明:

  • type d - 仅列出目录
  • regextype - 在定义正则表达式时使用egrep风格
  • regex - 定义要使用的正则表达式(我发现了一个与IP地址匹配的正则表达式)
  • mtime - 仅列出超过30天的目录
  • xargs rm -rf - 摆脱列出的目录

答案 1 :(得分:0)

基于你的正则表达式(你可以在stackoverflow上找到更好的IP地址):

find . -maxdepth 1 -regextype egrep -regex '.*([0-9]{1,3}\.){3}[0-9]{1,3}\b?$' -exec rm {} +

或者,由于您可能希望进行进一步处理,因此管道更好,用您想要的任何内容替换rm。如果要检查每个文件,请查看xargs和-I / -i的手册页:

find . -maxdepth 1 -regextype egrep -regex '.*([0-9]{1,3}\.){3}[0-9]{1,3}\b?$' -print0 | xargs -0 rm

另外,我认为" -maxdepth 1"特定于GNU查找,但大多数版本具有等价物。它使它不会递归 - 默认行为。