Isso faz exatamente o mesmo que a resposta de Peter, mas dá ao usuário a opção de qual arquivo remoto ele quer, e onde ele deseja salvá-lo (assim como conduzir o rsync sobre o ssh). Substitua o USER e HOST pelo seu nome de usuário e host, respectivamente.
#!/bin/bash
echo -e "Please enter the full (escaped) file path:"
read -r path
echo "Path: $path"
echo -e "Enter the destination:"
read -r dst
echo "Destination: $dst"
while [ 1 ]
do
rsync --progress --partial --append -vz -e ssh "USER@HOST:$path" $dst
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "rsync failure. Retrying in a minute..."
sleep 60
fi
done
As opções de rsync usadas aqui ativam as estatísticas de progresso durante a transferência, o salvamento de arquivos parciais em caso de falha inesperada e a capacidade de anexar arquivos parcialmente concluídos ao reiniciar. A opção -v aumenta a verbosidade, a opção -z ativa a compactação (boa para uma conexão lenta, mas requer mais poder de CPU em ambas as extremidades), e a opção -e nos permite conduzir essa transferência sobre o ssh (a criptografia é sempre boa).
Nota: Use isto somente se você tiver o login de chave pública habilitado com o seu ssh, caso contrário, ele pedirá uma senha quando ela for reiniciada (matando todas as funcionalidades do script).