繁体   English   中英

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

[英]Linux find command: searching for a filename containing parentheses

我需要找到文件名如下的文件:

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

即我想搜索包含的文件名

  • 以空格结尾的文本
  • 然后是一个左括号(括号)
  • 后跟数字 1
  • 后跟一个右括号
  • 可能后跟一个点,后跟一些更多的文字......

我先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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM