我有一个Syslog服务器,我从互联网上收集日志文件。我的配置根据传入的IP地址创建一个新文件夹和Syslog文件。
所以在我的/ var / log文件夹中我有IP地址的文件夹
我有一个命令会将它们全部删除,但它不够具体
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地址的文件夹,我将在文件夹的年龄工作。
有什么建议吗?
答案 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查找,但大多数版本具有等价物。它使它不会递归 - 默认行为。