Regex 删除以日期格式结束的日志
我创建了以下cli,以便删除日期格式最早的日志,最长的日期为500分钟 日期格式为: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
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+将使用尽可能多的文件名来堆叠命令