I'm using below command to transfer files cross server
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
Is there a way to transfer only files modified files just like update
command for cp
?
I'm using below command to transfer files cross server
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
Is there a way to transfer only files modified files just like update
command for cp
?
rsync
is your friend.
rsync -ru /source/directory/* [email protected]:/destination/directory
If you want it to delete files at the destination that no longer exist at the source, add the --delete
option.
--delete
, since visitors on a stale page might request an asset that no longer exists.
Commented
May 24, 2016 at 21:56
rsync
but have scp
. Is there a comparable solution, even if it needs a few lines of scripting?
Generally one asks for scp because there is a reason. I.e. can't install rsyncd on the target.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
Another option:
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
This is okay for one file but will be a bit slow for lots of files, depending on how quickly SSH can do repeated connections. If you have controlmasters set up on your SSH connection it might not be too bad. If you need to copy a while directory tree recursively, you could do a single SSH command that does sums on all the files, shove the result into a bash associative array, do the same on the local host, then compare file sums to decide whether to do the copy. But it's almost certainly easier to install rsync on the remote.