Estoy usando el siguiente comando para transferir archivos entre servidores
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
¿Hay alguna manera de transferir solo archivos modificados como update
el comando para cp
?
Respuesta1
rsync
es tu amigo.
rsync -ru /source/directory/* [email protected]:/destination/directory
Si desea que elimine archivos en el destino que ya no existen en el origen, agregue la --delete
opción.
Respuesta2
Generalmente uno pide scp porque hay una razón. Es decir, no se puede instalar rsyncd en el objetivo.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
Respuesta3
Otra opción:
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
Esto está bien para un archivo, pero será un poco lento para muchos archivos, dependiendo de qué tan rápido SSH pueda realizar conexiones repetidas. Si tiene controladores configurados en su conexión SSH, puede que no sea tan malo. Si necesita copiar un árbol de directorios while de forma recursiva, puede ejecutar un único comando SSH que sume todos los archivos, coloque el resultado en una matriz asociativa bash, haga lo mismo en el host local y luego compare las sumas de los archivos para decidir si para hacer la copia. Pero es casi seguro que sea más fácil instalar rsync en el control remoto.