SCP передает только измененные файлы
Я использую приведенную ниже команду для передачи файлов между серверами
scp -rc blowfish /source/directory/* username@domain.net:/destination/directory
Есть ли способ передачи только измененных файлов? update
команда для cp
?
3 ответа
rsync
твой друг.
rsync -ru /source/directory/* username@domain.net:/destination/directory
Если вы хотите удалить файлы в месте назначения, которых больше нет в источнике, добавьте --delete
вариант.
Как правило, каждый просит scp, потому что есть причина. Т.е. не удается установить rsyncd на цель.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
Другой вариант:
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
Это нормально для одного файла, но для большого количества файлов будет немного медленно, в зависимости от того, насколько быстро SSH может выполнять повторяющиеся соединения. Если у вас есть controlmasters, настроенные на вашем SSH-соединении, это может быть не так уж и плохо. Если вам нужно рекурсивно скопировать дерево каталогов while, вы можете выполнить одну команду SSH, которая суммирует все файлы, поместить результат в ассоциативный массив bash, сделать то же самое на локальном хосте, а затем сравнить суммы файлов, чтобы решить, нужно ли сделать копию. Но почти наверняка проще установить rsync на удаленном компьютере.