O Rsync definitivamente resolverá seu problema. Se você executar o rsync usando -e "ssh <ssh params>"
, ele será executado através de uma conexão ssh e, sob o capô, o que o rsync faz, ele (localmente) gera a lista de arquivos e o delta para cada um dos arquivos nessa lista, antes de compará-lo contra uma lista gerada remotamente, e enviando arquivos. Isso significa que mesmo em uma conexão rápida, pode ser lento para começar, mas uma vez que está indo é rápido.
Eu acredito que há uma versão do windows cli do rsync e ssh, se não você pode querer tentar instalar o cygwin com o bash / rsync / ssh. Não é uma instalação grande se você não quiser muito. O truque com o rsync é obter as opções certas para o que você deseja.
Portanto, no seu exemplo, você tem stagingserver.local
e remoteserver.local
. Vamos dizer que seu acesso ao remoteserver é como usuário releaseuser
. Em primeiro lugar, certifique-se de que você pode ssh para [email protected]
usando putty (sugiro que você configure ~ releaseuser / .ssh / authorized_keys em remoteserver.local para permitir que você faça login como releaseuser usando a versão pública de uma chave ssh local localkey.pub
, você pode definir isso criando uma chave privada em putty-keygen e salvando as chaves privadas / públicas do openssh como localkey
e localkey.pub
e, em seguida, carregue a chave pública em remoteserver.local
).
Ok, então rsync o diretório local localdirectory
para o controle remoto remotedirectory
, usando o acima: -
rsync -rave "ssh -i localkey" localdirectory/ [email protected]:/remotedirectory/
A barra à direita em cada um dos nomes de diretório, diz para copiar o conteúdo de localdirectory
para o diretório remotedirectory
em vez de copiar o próprio diretório. Se você perder a barra à direita, você receberá remotedirectory/localdirectory
criado no servidor remoto
Então, para explicar um pouco as opções que usei, havia -rave
(que eu sempre achei fácil de lembrar). O -r
significa recursivo, então desça em diretórios. O -a
significa arquivo, que é o mesmo que -rlptgoD
, o que significa basicamente enviar tudo (links, permissões, horas, grupos, proprietários, dispositivos, mas não hard-links, acls ou xattrs). -v
significa verbose, então echo para mostrar o que está enviando e -e especifica o comando rsh
(no nosso caso, ssh -i
, que diz ao ssh qual arquivo de chave usar).
Espero que ajude