linux查找名称中带有可选字符的文件

Chr*_*aes 3 regex linux find

假设我有两个文件:acabc。我想找到一个正则表达式来匹配两个文件。通常,我希望以下正则表达式能够正常工作,但它永远不会起作用:

find ./ -name ab?c
Run Code Online (Sandbox Code Playgroud)

我已经尝试过转义或不转问号,这似乎从来没有奏效。通常在我找到的正则表达式文档中;?表示:前一个字符重复了0或1次,但find似乎不理解这一点。

我已经在两个不同的查找版本上进行了尝试:GNU查找版本4.2.31和查找(GNU findutils)4.6.0

PS:可以使用*,但我特别想只匹配一个可选字符

find ./ -name a*c
Run Code Online (Sandbox Code Playgroud)

./ac
./abc
Run Code Online (Sandbox Code Playgroud)

zin*_*yev 6

要仅匹配一个可选字符的表达式,请尝试使用or选项:

touch abc ac abbc
find . -name "a?c" -or -name "ac"
Run Code Online (Sandbox Code Playgroud)

只给你:abcac名字。

or一般来说,您可以使用和andoptions =)构建相当复杂的查找查询


hek*_*mgl 5

传递给-name的表达式不是正则表达式,而是全局表达式。一个(单个)glob表达式不能用于您的用例,但是您可以使用使用以下正则表达式-regex

find -regex '.*/ab?c'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,默认的正则表达式语言是Emacs样式,如下所述:https : //www.emacswiki.org/emacs/RegularExpression。您可以使用更改正则表达式语言-regextype