查找命令的正则表达式以匹配具有非空文件扩展名的文件

Regex for find command to match files with a non-empty file extension

我有一系列要清理的文件,它们是已轮换的 .log 文件。示例:

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

正则表达式匹配所有日志文件:

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

如何只匹配*.log之后有字符的文件?

将最后一次出现的 .* 替换为 .+

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

您还需要将 log 之前的 . 转义为 \,否则它将匹配任何字符,而不仅仅是文字句点。

总之,使用这个:

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

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

  • 您可能不想匹配文件名为空的文件,因此您还应该将第一个 .* 也切换为 .+(谢谢,Jan!) .

  • 您可能不想允许文件扩展名为 .log. 的文件(.*log 后的单个 . 字符),因此您应该切换最后的 .+\..+.

这会给你最后的命令:

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