如何将 Bash 的 glob 数组与 find 一起使用?

stb*_*boy 3 bash

我有一组想要提供给的 glob find

我的数组是:

arr=('a*.txt' 'b[2-5].sh' 'ab?.doc')
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

find . -type f -name '${arr[@]}'
Run Code Online (Sandbox Code Playgroud)

这里我们的数组可能包含很多元素!感谢您的答复!

Fra*_*ona 5

使用 搜索多个全局模式的方法find并不像 ; 那样简单find -name "${arr[@]}"。你需要相当于:

find '(' -name 'a*.txt' -o -name 'b[2-5].sh' -o -name 'ab?.doc' ')'
Run Code Online (Sandbox Code Playgroud)

注意:在您的情况下,括号不是强制性的,但您需要它们来添加其他操作数,例如-type f

也就是说,如果你的起点是包含你的 glob 的 bash 数组,那么你可以find像这样构建参数:

arr=('a*.txt' 'b[2-5].sh' 'ab?.doc')

names=()
for glob in "${arr[@]}"
do
    [[ $names ]] && names+=( -o )
    names+=(-name "$glob")
done

find '(' "${names[@]}" ')'
Run Code Online (Sandbox Code Playgroud)

  • 好的。我建议在循环之前初始化“names”,以确保它以“names=()”开始为空。 (2认同)