Copiando arquivos usando o rsync do servidor remoto para a máquina local

319

Uma vez que eu ssh'd no meu servidor remoto, qual seria o comando para copiar todos os arquivos de um diretório para um diretório local na minha máquina?

markstewie
fonte
4
Porque você pode rsyncdiretamente da sua máquina local.
31412 Johnsyweb
2
Oh ... sim eu posso. Eu vejo as outras respostas agora. Obrigado.
markstewie
17
Essa é uma tarefa comum para o desenvolvimento (web) com uma boa resposta. Não vejo por que ainda está fechado.
d.raev
6
Acho que @ d.raev estava se referindo ao fato de que a pergunta foi encerrada como fora de tópico (se bem me lembro , sinalizei para que essa pergunta fosse migrada para o SuperUser, onde acho que ela se encaixa melhor), em vez de não haver uma resposta aceita . Ainda assim ... foi bom ter minha resposta aceita depois de todo esse tempo. :-)
Johnsyweb
3
@markstewie sem sentimentos ruins, é uma boa pergunta e me ajudou (parece muitos outros também), mas esse "fechado" faz com que não pareça digno de confiança, então eu costumava chamar a atenção.
d.raev

Respostas:

575

Na sua máquina local:

rsync -chavzP --stats [email protected]:/path/to/copy /path/to/local/storage

Na sua máquina local com uma porta ssh não padrão:

rsync -chavzP -e "ssh -p $portNumber" [email protected]:/path/to/copy /local/path

Ou do host remoto, supondo que você realmente queira trabalhar dessa maneira e que sua máquina local esteja ouvindo no SSH:

rsync -chavzP --stats /path/to/copy [email protected]:/path/to/local/storage

Veja man rsyncuma explicação dos meus comutadores habituais.

Johnsyweb
fonte
255
Uma explicação sobre o comando: explainshell.com/...
beefsack
118
Uau, esse site explicativo é incrível.
precisa saber é o seguinte
2
@cmcdragonkai: de fato, o host local deve estar executando um servidor ssh e estar acessível ao host remoto. Essa é uma das razões pelas quais prefiro a primeira solução ao invés da segunda.
Johnsyweb 22/02
16
Tenha cuidado ao sincronizar com barras à direita. O comando dado por Johnnysweb criaria um diretório chamado copy inside /path/to/local/storage. Assim /path/to/local/storage/copy. Se é isso que você quer, ótimo. No entanto, um cenário mais comum é que você deseja copiar o conteúdo do diretório remoto para um diretório em seu local. Você faria o /path/to/copy/que colocaria o conteúdo dentro do diretório /path/to/local/storagesem criar um diretório de cópia local.
chap
16
Eu vim aqui para um comando rsync e vim com o explicshell.com . Obrigado @beefsack!
Cifásico
49

Se você tiver acesso SSH, não precisará primeiro do SSH e depois copiar, basta usar a Cópia Segura (SCP) do destino.

scp user@host:/path/file /localpath/file

Caracteres curinga são suportados, então

scp user@host:/path/folder/* /localpath/folder

copiará todos os arquivos remotos nessa pasta. Se copiar mais de um diretório.

note -r também copiará todas as subpastas e conteúdo.

Tezyn
fonte
6
Por que usar em scpvez de rsync? Além disso, observe que seu shell não tenta expandir user@host:/path/folder/*, talvez usando aspas simples ( ').
31712 Johnsyweb
Acho scp mais fácil de usar a partir do destino .... Essencialmente, é uma cópia de arquivo através do ssh, mas sem precisar estabelecer a conexão ssh primeiro.
Tezyn 2/02/12
8
Eu sei o que scp é, essa não foi minha pergunta. Por que você não usou rsync? É isso que a pergunta pede, não requer uma sessão SSH estabelecida e geralmente é mais rápida e eficiente do que scp.
Johnsyweb 02/02/12
26
Lembre-se, o scp segue links simbólicos em vez de copiá-los. Isso pode levar à cópia mais do que o esperado e à perda de links simbólicos (eles se tornam pastas / arquivos normais).
26513 Mondane
2
A resposta de Mondane é precisamente a razão pela qual encontrei este post. Normalmente, eu uso o scp para tudo, mas eu precisava preservar as permissões e o link simbólico de servidor para servidor. Além disso, a diferença de velocidade (bc meu novato definitivamente definiu primeiro) foi vasta.
Kyle