Rsync определенно решит вашу проблему. Если вы запустите rsync, используя -e "ssh <ssh params>"
тогда он будет работать через соединение ssh, и, как это делает rsync, он (локально) генерирует список файлов и дельту для каждого из файлов в этот список, прежде чем сравнивать его с удаленно сгенерированным списком и отправлять файлы. Это означает, что даже при быстром соединении может начаться медленно, но как только это происходит, это быстро.
Я полагаю, что есть версия Windows rsync и ssh для Windows, в противном случае вы можете попробовать установить cygwin с помощью bash/rsync/ssh. Это не большая установка, если вы не хотите много. Хитрость с rsync заключается в получении правильных вариантов того, что вы хотите.
Таким образом , в вашем примере, у вас есть stagingserver.local
и remoteserver.local
Допустим, у вас есть доступ к удаленному серверу, как к пользователю releaseuser
. Во-первых, убедитесь, что вы можете использовать ssh для releaseuser@remoteserver.local
используя putty (я предлагаю вам настроить ~ releaseuser/.ssh/authorized_keys на remoteserver.local, чтобы вы могли войти в качестве releaseuser, используя публичную версию локального ключа ssh localkey.pub
, вы можете установите это путем создания закрытого ключа в putty-keygen и сохранения открытых /открытых ключей openssh как localkey
и localkey.pub
, а затем загрузите открытый ключ в remoteserver.local
).
Итак, rsync для локального каталога localdirectory
в удаленный remotedirectory
, используя приведенное выше:-
rsync -rave "ssh -i localkey" localdirectory/ releaseuser@remoteserver.local:/remotedirectory/
Завершающая косая черта в каждом из имен каталогов говорит ему скопировать содержимое localdirectory
в каталог remotedirectory
а не копировать сам каталог. Если вы пропустите завершающий слеш, вы получите remotedirectory/localdirectory
созданный на удаленном сервере
Поэтому, чтобы немного пояснить варианты, которые я использовал, были -rave
(которые мне всегда легко запомнить). -r
означает рекурсивный, поэтому сходите в каталоги. -a
означает архив, который аналогичен -rlptgoD
, что означает в основном отправку всего (ссылок, разрешений, времени, групп, владельцев, устройств, но не жестких ссылок, acls или xattrs). -v
означает многословный, поэтому выведите его на экран, а -e указывает команду rsh
(в нашем случае ssh -i
, которая сообщает ssh, какой файл ключа использовать).
надеюсь, это поможет