Regex 删除以日期格式结束的日志

Regex 删除以日期格式结束的日志,regex,linux,bash,find,Regex,Linux,Bash,Find,我创建了以下cli,以便删除日期格式最早的日志,最长的日期为500分钟 日期格式为: data-node.log.xxxx-xx-xx-[1-10] 应删除日志的cli find /var/log/test/ -type f -mmin +500 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,10\}$' -delete 正如我们所见,日志仍然存在 ls -l /var/log/test

我创建了以下cli,以便删除日期格式最早的日志,最长的日期为500分钟

日期格式为:

 data-node.log.xxxx-xx-xx-[1-10]
应删除日志的cli

find /var/log/test/  -type f -mmin +500 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,10\}$' -delete
正如我们所见,日志仍然存在

ls -l /var/log/test/



-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-12-14
-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-12-15
-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-06-16
-rw-r--r-- 1 root root 0 10:02 data-node.log.2020-01-17
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-1723
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-172334
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-17233434
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-1723343434

我哪里错了?

您的正则表达式与文件不匹配。改变

'.\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,10\}$'

为了

'.\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2,10\}$'


因为没有第三个连字符或第四个日期字段。

在编写正则表达式时,您犯了两个逻辑错误:

一,。 '.*.log.[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{2,10}$ 这个负号将不存在

二,。 '.*.log.[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{2,10}$ 这个定量是错误的。文件名可以,但不一定包含2到10个额外的数字。因此,尾行$也是错误的

这将有助于:

find /var/log/test/ -type f -mmin +500 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}[0-9]*' -exec rm {} +
Exec+将使用尽可能多的文件名来堆叠命令