Lista de exclusión de directorios de construcción mediante programación para Buscar comando (Bash)

Tengo una variedad de directorios para excluir del resultado de mi comando find, algo así comoEXCLUDE=("foo" "bar").

Puedo ejecutar esto desde la terminal interactiva así:

find . -name 'hvr.yml' -not -path "foo/*" -not -path "bar/*"

Y entonces intenté construir el argumento de esta manera:

getServersToCheck() {

    # Build command arguments to exclude given dirs
    local exclude_command="-not -path"
    local excount=${#EXCLUDE[@]}
    for ((i=0;i<excount;i++)); do
        EXCLUDE[i]="${exclude_command} ${EXCLUDE[i]}/*"
    done

    find . -name 'hvr.yml' "${EXCLUDE[@]}"
}

Pero esto resulta en encontrar arrojando un error de predicado desconocido: '-not -path foo / *'

¿Hay alguna forma de lograr esto? Cuando hago eco del comando, parece correcto, pero debe haber algunas reglas de sintaxis bash que hacen que esto no funcione como esperaba.

ACTUALIZAR

Yo añadí\" alrededor del camino para excluir mientras leo que el bloqueo solo ocurre con cadenas citadas. xtrace muestra lo siguiente:

find . -name hvr.yml -not -path '"foo/*"' -not -path '"bar/*"'

Las comillas simples posiblemente sean el problema

La eliminación de la\" y ejecutarse con xtrace muestra que el globbing se está aplicando en el bucle for, lo que resulta en:

find . -name hvr.yml -not -path "foo/fileinfoo" "foo/somethingelseinfoo" -not -path "bar/*" "bar/fileinbar" "bar/otherfilesinbar"

Y así, find se queja de que se proporcionen rutas aleatorias como argumentos.

¿Hay alguna forma de expandir la matriz EXCLUDE y agregar / * al final de cada elemento en el comando?

Respuestas a la pregunta(1)

Su respuesta a la pregunta