在find中排除目录的数组/列表

时间:2019-06-19 06:39:45

标签: bash find

我正在尝试使用配置文件中提供的数组来排除find中的目录列表。数组的一个简单示例如下:

excludedDirList2[0]='*.'
excludedDirList2[1]='node_modules'

我一直在使用-prune! -path选项,但我想不出一种方法来动态读取数组,生成find并使其实际工作。

有效但不能动态读取数组的命令示例

find $dir -type f -name "hidden.txt" ! -path "${excludedDirList[1]}" ! -path "${excludedDirList[0]}"

1 个答案:

答案 0 :(得分:3)

如果可行,只需在数组的每个元素前面添加!-path,然后将其传递给find

 excludedDirList2=('*.' 'node_modules')
 findargs=()
 for i in "${excludedDirList2[@]}"; do
       findargs+=('!' '-path' "$i")
 done
 find "$dir" -type f -name "hidden.txt" "${findargs[@]}"