com zsh
:
cd /home/config && ssh user@host << \EOF | tar xpf -
zsh -c '
cd /tmp || exit
typeset -A seen; files=()
for f (app_conf*_*_*.tgz(On)) {((seen[${f%_*_*}]++)) || files+=($f)}
tar cf - $files'
EOF
Se o shell de login de user
em host
for zsh
, você poderá simplificá-lo para:
cd /home/config && ssh user@host '
cd /tmp || exit
typeset -A seen; files=()
for f (app_conf*_*_*.tgz(On)) {((seen[${f%_*_*}]++)) || files+=($f)}
tar cf - $files' | tar xpf -
A idéia é que processemos a lista de arquivos em ordem reversa ( (On)
) e selecione o arquivo se a parte do nome do arquivo antes de _*_*
não foi vista.
Os arquivos são transferidos usando tar
, que também tem o benefício de transferir todos os metadados dos arquivos.