Estou usando o comando abaixo para transferir arquivos entre servidores
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
Existe uma maneira de transferir apenas arquivos modificados como update
comando para cp
?
Responder1
rsync
é seu amigo.
rsync -ru /source/directory/* [email protected]:/destination/directory
Se você deseja excluir no destino arquivos que não existem mais na origem, adicione a --delete
opção.
Responder2
Geralmente pede-se scp porque há um motivo. Ou seja, não é possível instalar o rsyncd no destino.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
Responder3
Outra opção:
remote_sum=$(ssh ${remote} sha256sum ${dest_filename})
remote_sum=${remote_sum%% *}
local_sum=$(sha256sum ${local_filename})
local_sum=${local_sum%% *}
if [[ ${local_sum} != ${remote_sum} ]]; then
scp ${local_filename} ${remote}:${remote_filename}
fi
Isso é aceitável para um arquivo, mas será um pouco lento para muitos arquivos, dependendo da rapidez com que o SSH pode fazer conexões repetidas. Se você tiver controlmasters configurados em sua conexão SSH, pode não ser tão ruim. Se você precisar copiar uma árvore de diretórios while recursivamente, poderá executar um único comando SSH que soma todos os arquivos, colocar o resultado em uma matriz associativa bash, fazer o mesmo no host local e comparar as somas dos arquivos para decidir se para fazer a cópia. Mas é quase certo que é mais fácil instalar o rsync no controle remoto.