如何使用 *nix find 命令通过正则表达式搜索特定文件

如何使用 *nix find 命令通过正则表达式搜索特定文件

在我的 centOS 中,/log 文件夹中有很多日志文件

/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3
/log/log.20120308.error
/log/log.20120308.error.1

显然如果我使用下面的命令

find /log -type f -iregex '.*/'log.20120308'.[0-9]*' -print

我只会得到

/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3

我希望有正确的正则表达式来获取下面的列表,但失败了

/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3

我无法找出选择扩展名 .1、.2、.3 或空白的正则表达式

答案1

find /log -type f -iregex '.*/'log.20120308'\(\.[0-9]*\)?' -print

表示?一个或无,并且你应该转义点(在 [0-9] 之前,因为点匹配一切),因此如果您不对点进行转义,/log/log.20120308_1则如果该文件存在,您也会得到结果。

答案2

一个版本:

find /log -type f -iregex '.*/'log.20120308'[.0-9]*' -print

当然,这也会选择一个名为的文件/log/log.20120308..,但我不认为这会是一个可能的问题。

另一种方法是使用-o“或”运算符,并在操作数周围加上转义括号:

find /log -type f \( -iregex '.*/'log.20120308'.[0-9]*' -o -iregex '.*/'log.20120308 \) -print

哦,还有一个关于使用的更新-iregex:你可以简单地引用一下,因为'.*/log.20120308.[0-9]*'会选择与'.*/'log.20120308'.[0-9]*' 将其与@md-gao 的建议结合起来,你可以得到这个版本:

find /log -type f -iregex '.*/log.20120308\(\.[0-9]\)?' -print

相关内容