下面是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)
find
不使用glob()
. 它用fnmatch()
。这就是为什么谓词中唯一可用的元字符-name
是*
、?
和。[
]
为了解决尾随问题,-o
我建议将其放在括号中并添加额外的-false
谓词:
( -name AAA -o -name BBB -o -name CCC -o -false )
Run Code Online (Sandbox Code Playgroud)