I'm using below command to transfer files cross server
scp -rc blowfish /source/directory/* username@domain.net:/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/* username@domain.net:/destination/directory
If you want it to delete files at the destination that no longer exist at the source, add the --delete option.
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.