Pela aparência das coisas, tudo que você precisa fazer é soltar as aspas (quebras de linha adicionadas para maior clareza):
rsync -avz \
david@machineB:/data/pe_t1_snapshot/20140317/t1_weekly_1680_0_200003_5.data \
:/data/pe_t1_snapshot/20140317/t1_weekly_1680_1_200003_5.data \
/data01/primary
Na página rsync
man:
The syntax for requesting multiple files from a remote host is done by
specifying additional remote-host args in the same style as the first, or with
the hostname omitted. For instance, all these work:
rsync -av host:file1 :file2 host:file{3,4} /dest/
Os dois primeiros arquivos no exemplo copiado usam a mesma sintaxe que você tem, porém eles são argumentos separados (citando-os concatena-os em um único argumento). Se seus caminhos contiverem caracteres que precisam ser citados, você poderá fazer algo como:
rsync -avz \
'user@host:dodgy path/file_with_asterix*' \
':some_other/dodgy\path' \
/dest
Atualizar
Acho que a maneira mais simples de fazer seu script funcionar é usar matrizes para primary_files
e secondary_files
. As alterações relevantes para primary_files
são:
for n in "${PRIMARY_PARTITION[@]}"
do
primary_files+=( ":$dir1/t1_weekly_1680_${n}_200003_5.data" )
done
....
echo "Primary: ${primary_files[@]}"
...
rsync -avz "david@${FILERS_LOCATION[0]}${primary_files[@]}" "$PRIMARY/"
O [@]
dividirá a matriz em argumentos diferentes, independentemente da citação. Caso contrário, lembre-se de suas citações variáveis, algumas das quais você pode ou não causar problemas.