如何使用带有find的球的Bash数组



我有一个glob数组,要将其提供给find

我的阵列是:

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

我试过了:

find . -type f -name '${arr[@]}'

在这里,我们的数组可能包含许多元素!感谢您的回复!

使用find搜索多个glob模式的方法不如find -name "${arr[@]}"简单;你需要类似于的东西

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

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

也就是说,如果你的起点是一个包含globs的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[@]}" ')'

最新更新