Copiar archivos usando rsync del servidor remoto a la máquina local

319

Una vez que haya ingresado a mi servidor remoto, ¿cuál sería el comando para copiar todos los archivos de un directorio a un directorio local en mi máquina?

markstewie
fuente
44
Porque puede rsyncdirectamente desde su máquina local.
Johnsyweb 01 de
2
Oh si puedo. Ahora veo las otras respuestas. Gracias.
markstewie 01 de
17
Esta es una tarea común para el desarrollo (web) con una buena respuesta. No veo por qué todavía está cerrado.
d.raev
66
Creo que @ d.raev se refería al hecho de que la pregunta estaba cerrada como fuera de tema (si recuerdo correctamente, marqué para que esta pregunta se migrara a SuperUser, donde creo que encaja mejor) en lugar de que no hubo una respuesta aceptada . Aún así ... fue agradable tener mi respuesta aceptada después de todo este tiempo. :-)
Johnsyweb
3
@markstewie no tiene malos sentimientos, es una buena pregunta y me ayudó (parece que muchos otros también) pero este "cerrado" hace que parezca que no es digno de confianza, por lo que me pregunté a prestarle atención.
d.raev

Respuestas:

575

Desde su máquina local:

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

Desde su máquina local con un puerto ssh no estándar:

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

O desde el host remoto, suponiendo que realmente desea trabajar de esta manera y su máquina local está escuchando en SSH:

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

Consulte man rsyncpara obtener una explicación de mis interruptores habituales.

Johnsyweb
fuente
255
Una explicación del comando: explainshell.com/...
beefsack
118
Wow, eso explica que el sitio es increíble.
gosukiwi
2
@cmcdragonkai: de hecho, el host local debe estar ejecutando un servidor ssh y ser accesible para el host remoto. Esta es una de las razones por las que prefiero la primera solución sobre la segunda.
Johnsyweb
16
Tenga cuidado al sincronizar con barras diagonales. El comando dado por Johnnysweb crearía un directorio llamado copy inside /path/to/local/storage. Me gusta así /path/to/local/storage/copy. Si eso es lo que quieres genial. Sin embargo, un escenario más común es que desea copiar el contenido del directorio remoto en un directorio en su local. Luego haría lo /path/to/copy/que colocaría el contenido dentro del directorio /path/to/local/storagesin crear un directorio de copia local.
cap
16
Vine aquí para un comando rsync y salí con explicahell.com . Gracias @beefsack!
Cyphase
49

Si tiene acceso SSH, no necesita SSH primero y luego copiar, solo use Copia segura (SCP) desde el destino.

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

Se admiten caracteres comodín, por lo que

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

copiará todos los archivos remotos en esa carpeta. Si copia más de un directorio.

note -r copiará todas las subcarpetas y el contenido también.

Tezyn
fuente
66
¿Por qué usar en scplugar de rsync? Además, observe que su shell no intente expandirse user@host:/path/folder/*, quizás utilizando comillas simples ( ').
Johnsyweb 01 de
Creo que scp es más fácil de usar desde el destino ... Esencialmente es una copia de archivo sobre ssh, pero sin tener que establecer primero la conexión ssh.
Tezyn
8
Sé lo que scpes, esa no era mi pregunta. ¿Por qué no lo usaste rsync? Esto es lo que pide la pregunta, no requiere una sesión SSH establecida y, a menudo, es más rápido y más eficiente que scp.
Johnsyweb
26
Recuerde, scp sigue enlaces simbólicos en lugar de copiarlos. Esto puede llevar a copiar más de lo esperado y a la pérdida de enlaces simbólicos (se convierten en carpetas / archivos normales).
Mondane
2
La respuesta de Mondane es precisamente la razón por la que encontré esta publicación. Normalmente, uso scp para todo, pero necesitaba preservar los permisos y el enlace simbólico de servidor a servidor. Además, la diferencia de velocidad (bc mi auto novato definitivamente scped primero) fue enorme.
kyle