Você pode executar:
'rsync --files-from=<( printf "%s\n" "${files[@]}" ) source destination
-
<()
abre um canal e preenche-o com o conteúdo do comando interno. Retorna um descritor de arquivo -
printf "%s\n" "${files[@]}"
ecoa cada nome de arquivo em uma linha diferente