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?


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 user@remote.host:/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" user@remote.host:/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 user@host.remoted.from:/path/to/local/storage

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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.