O problema é que, escrevendo "--exclude='$item'"
, você está colocando aspas simples no padrão de exclusão. Então você está excluindo '/foo'
e assim por diante, mas provavelmente você não tem arquivos com nomes começando e terminando com aspas simples.
Você precisa escrever
EXCLUDES+=( "--exclude=$item" )
ou, como isso é zsh, você não precisa de aspas duplas: apenas escreva
EXCLUDES+=( --exclude=$item )
ou, como isso é zsh, você não precisa de um loop: basta usar o opção de expansão do parâmetro ^
:
rsync -a --exclude=$^EXCLUDE_ITEMS …
Em ksh ou bash, você precisaria do loop e aspas duplas:
EXCLUDES=()
for item in "${EXCLUDE_ITEMS[@]}"; do
EXCLUDES+=( "--exclude=$item" )
done
rsync -a "${EXCLUDES[@]}" …