多部分参数的 Bash globbing

Jef*_*and 5 bash wildcards

下面是find我尝试运行的命令的一些示例。我正在寻找不同的方式,我可以使用通配符来生成(作为示例)带有连接在一起的谓词的 find 命令。

不起作用,因为find在每个之前需要一个 -name,在每个之间需要一个 -o。

find . -name \*.{sh,pl,sql}
#find . -name *.sh *.pl *.sql
Run Code Online (Sandbox Code Playgroud)

由于尾随而不起作用-o。可以在那里提出一个保证失败的论点,但并不理想。此外,我的快捷方式现在比我的输出长。

find . `for X in {sh,pl,sql}; do echo -name \\\*.$X -o ;done`
#find . -name \*.sh -o -name \*.pl -o -name \*.sql -o
Run Code Online (Sandbox Code Playgroud)

失败,因为它们被分组为一个参数 ( find: unknown predicate '-name *.sh')。此外,仍然表现出缺乏与 -o 的连接。

find . -name\ \*.{sh,pl,sql}
Run Code Online (Sandbox Code Playgroud)

有效,但不涉及通配符(回复:非答案):

find .  -regex '.*\(sh\|pl\|sql\)'    
Run Code Online (Sandbox Code Playgroud)

Mic*_*jer 1

find不使用glob(). 它用fnmatch()。这就是为什么谓词中唯一可用的元字符-name*?和。[]

为了解决尾随问题,-o我建议将其放在括号中并添加额外的-false谓词:

( -name AAA -o -name BBB -o -name CCC -o -false )
Run Code Online (Sandbox Code Playgroud)