Linux find 命令:搜索包含括号的文件名
Linux find command: searching for a filename containing parentheses
我需要查找具有如下文件名的文件:
<some regex-matched text> (1).<some regex-matched text>
即我想搜索包含
的文件名
- 以 space
结尾的文本
- 然后是左括号(圆括号)
- 后接数字 1
- 后跟右括号
- 可能后跟一个点,然后是更多文本...
我先去了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)\(\..*\)?'
尽管使用了捕获组(转义括号)\(\..*\)
这样我们就可以将最后一个匹配项设为可选(可能后跟一个点,然后是更多文本 ) ?
我需要查找具有如下文件名的文件:
<some regex-matched text> (1).<some regex-matched text>
即我想搜索包含
的文件名- 以 space 结尾的文本
- 然后是左括号(圆括号)
- 后接数字 1
- 后跟右括号
- 可能后跟一个点,然后是更多文本...
我先去了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)\(\..*\)?'
尽管使用了捕获组(转义括号)\(\..*\)
这样我们就可以将最后一个匹配项设为可选(可能后跟一个点,然后是更多文本 ) ?