用正则表达式查找。使用变量中的字符串文字

find with regex. Using string literals from variable

我知道 shell 并没有真正的数组,但我知道我可以用值列表来做到这一点:

dir_array=("quarantine" "720" "low" "high" "DVD" "error" "keep")

for d in "${dir_array[@]}"
do
…
done

我也知道我可以使用 -regex 和 -prune 从查找中排除这些目录:

find -E . \
-type d -regex './(DVD|quarantine|720|high|low|error|keep)' -prune -o \
-type f -iregex '.*.(avi|wmv|mp4|m4v|mov|mkv)' -print

所以,最后,这是我的问题:

如何在查找的(第一个)正则表达式中使用我原来的 $dir_array 而不是重复自己?

您可以将数组转换为字符串变量,然后在 find 命令中使用该变量,如下所示:

str=`echo "./(${dir_array[@]})" | sed "s/ /\|/g;"` 
echo "$str"