Criar lista de exclusão de diretório programaticamente para o comando Localizar (Bash)

Eu tenho uma matriz de diretórios para excluir do resultado do meu comando find, algo comoEXCLUDE=("foo" "bar").

Eu posso executar isso no terminal interativo da seguinte maneira:

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

E então eu tentei construir o argumento assim:

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[@]}"
}

Mas isso resulta em encontrar lançando um erro de predicado desconhecido: '-not -path foo / *'

Existe maneira de conseguir isso? Quando eu ecoo o comando, parece correto, mas deve haver algumas regras de sintaxe do bash que estão fazendo com que isso não funcione como eu esperava.

ATUALIZAR:

Eu adicionei\" ao redor do caminho para excluir enquanto li que o globbing ocorre apenas com strings entre aspas. O xtrace mostra o seguinte:

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

As aspas simples podem ser o problema

Removendo o\" e executando com xtrace mostra que o globbing está sendo aplicado no loop for, resultando em:

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

E assim, encontrar está reclamando sobre caminhos aleatórios sendo dados como argumentos.

Existe uma maneira de expandir a matriz EXCLUDE e adicionar / * no final de cada elemento no comando?

questionAnswers(1)

yourAnswerToTheQuestion