2016-02-05 69 views
1

我有一系列文件,我想要清理已经旋转的.log文件。例子:正则表达式find命令来匹配非空文件扩展名的文件

error.log 
access.log 
error.log-2016-02-05 
access.log.1 
debug.log 
debug.log--2 

正则表达式是匹配所有的日志文件的使用:

find . -regextype posix-extended -regex '^.*.log.*' 

如何,我只只匹配后* .LOG有字符的文件?

回答

3

.+代替.*的最后一次出现。

  • *匹配前一个字符的0个或多个实例。
  • +匹配1个或多个实例。

您还需要log\之前逃离.,否则会匹配任何字符,而不仅仅是文字句点。

综上所述,使用此:

find . -regextype posix-extended -regex '^.*\.log.+' 

其他一些调整,也可能是有用的:

  • 你可能不想匹配空文件名的文件,所以你也应该将第一个.*切换为.+(谢谢,Jan!)。

  • 你可能不希望允许文件与文件扩展名.log..*log后一个。字符),所以你应该最终.+切换到\..+

这将给你最后的命令:

find . -regextype posix-extended -regex '^.+\.log\..+' 
+1

仅有[regex101.com演示(https://regex101.com/r/xB4oE0/1)可视化你的方法。我甚至会将第一个'。*'改为'。+?',否则像.log.123这样的文件名也会匹配。尽管如此,+1。 – Jan

相关问题