[英]Linux find command: searching for a filename containing parentheses
我需要找到文件名如下的文件:
<some regex-matched text> (1).<some regex-matched text>
即我想搜索包含的文件名
我先find . -regex '.* \\(1\\)\\..*'
find . -regex '.* \\(1\\)\\..*'
。 但是括号有点被忽略:匹配.* 1\\..*
被返回。
在我试图找到答案的过程中,我发现了这个页面,涵盖了 Linux find
。 我在这里找到了这句话:
“使用反斜杠后跟括号 '\\(', '\\)' 进行分组。”
[注意向读者展示一个反斜杠,如该页面所示,我将反斜杠加倍以写出上面的单反斜杠!]
我不知道该怎么做,即在这种情况下如何逃避普通括号。 我想也许在find
表达式中加倍反斜杠可能会起作用,但它没有。
即使我尝试在不使用正则表达式的情况下执行此操作, find
似乎在此位置的括号和/或点存在一些问题:
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]
注意在这些尝试中的初始 * 后面放一个空格也失败了......
那是因为您不需要转义这些括号。 这应该工作:
find . -regex '.* (1)\(\..*\)?'
虽然捕获组使用(括号转义) \\(\\..*\\)
这样我们就可以做出最后一场比赛中可选的(可能后面跟着一个点,接着一些文字)用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.