Linux find 命令:搜索包含括号的文件名

Linux find command: searching for a filename containing parentheses

我需要查找具有如下文件名的文件:

<some regex-matched text> (1).<some regex-matched text>

即我想搜索包含

的文件名

我先去了find . -regex '.* \(1\)\..*'。但是括号有点被忽略:返回匹配 .* 1\..* 的文件。

在我试图寻找答案的过程中,我发现 this page 涵盖了 Linux find。我在这里找到这个短语:

"Grouping is performed with backslashes followed by parentheses ‘\(’, ‘\)’."

[注意向您展示 reader 单个反斜杠,如该页面所示,我将反斜杠加倍以在上面写单个反斜杠!]

我不确定该怎么做,即在那种情况下如何转义普通括号。我想也许在 find 表达式中将反斜杠加倍可能会起作用,但它没有。

即使我尝试不使用正则表达式来做到这一点,find 似乎在括号 and/or 这个地方有一个点的问题:

mike@M17A .../accounts $  find . -name *(1).pdf
[... finds stuff OK]
mike@M17A .../accounts $  find . -name *(1).*
find: paths must precede expression: ..
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
mike@M17A .../accounts $  find . -name *(1)\.*
find: paths must precede expression: ..
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]

注意在这些尝试中的初始 * 后面放置 space 也失败了...

那是因为你不需要转义 这些 括号。这应该有效:

find . -regex '.* (1)\(\..*\)?'

尽管使用了捕获组(转义括号)\(\..*\) 这样我们就可以将最后一个匹配项设为可选(可能后跟一个点,然后是更多文本 ) ?