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 на удаленном компьютере.

Другие вопросы по тегам