Cada -name
, cada -or
, cada parênteses e cada padrão deve ser um argumento separado para find
. Não concatene os argumentos com espaços intermediários: você não pode voltar para uma lista de argumentos - como você poderia saber quais espaços existem para separar argumentos e quais espaços são parte de um argumento? Veja também Por que meu shell script sufocar no espaço em branco ou outros caracteres especiais?
Se o seu shell suportar matrizes (ksh, bash, zsh), armazene a lista de argumentos em uma matriz.
names=(\( -name a\* -or -name b\* \))
…
find "${names[@]}"
Se o seu shell não suporta arrays, você pode construir a lista nos argumentos posicionais (os argumentos que você pode acessar como $1
, $2
,…). A limitação óbvia é que você não pode usar os argumentos posicionais para outro propósito.
set -- \( -name a\* -or -name b\* \)
…
find "$@"