SCP передает только измененные файлы

SCP передает только измененные файлы

Я использую следующую команду для передачи файлов между серверами

scp -rc blowfish /source/directory/* [email protected]:/destination/directory

Есть ли способ передавать только измененные файлы, как updateв команде cp?

решение1

rsyncтвой друг.

rsync -ru /source/directory/* [email protected]:/destination/directory

Если вы хотите, чтобы в месте назначения удалялись файлы, которых больше нет в источнике, добавьте эту --deleteопцию.

решение2

Обычно scp запрашивают, потому что есть причина. Например, невозможно установить rsyncd на целевой машине.

files=`find . -newermt "-3600 secs"`

for file in $files
do
       sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done

решение3

Другой вариант:

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

Связанный контент