Pregunta ¿Puede scp copiar directorios de forma recursiva?


Actualmente solo puedo copiar una sola .tar expediente. Pero ¿cómo puedo copiar directorios recursivamente con scp?


518
2018-04-29 04:24


origen




Respuestas:


Si us -r:

scp -rp sourcedirectory user@dest:/path
  • -r significa recursivo
  • -p conserva los tiempos de modificación, los tiempos de acceso y los modos del archivo original.

Nota: Esto crea el sourcedirectory dentro /path así los archivos estarán en /path/sourcedirectory


838
2018-04-29 04:28



Sin embargo, tenga en cuenta que esto no conservará los enlaces simbólicos. - CpnCrunch
Tenga en cuenta que -pr (las opciones en orden inverso) no copiarán las carpetas, sino su contenido en el directorio de destino (aparentemente, el orden de las opciones importa). - pms
Por alguna razón /path parece ser relativo a la users $HOME - ¿Cómo lo hago absoluto sin ser? root@? - Jonathan
Sí, SCP como nunca pone los archivos donde quiero. A menudo, cuando trato de reemplazar un directorio, de alguna manera termino con otro directorio dentro con el mismo nombre. Soy muy cuidadoso con esto. - sudo


Si bien las respuestas anteriores son técnicamente correctas, también debe considerar usar rsync en lugar. rsync compara los datos en los lados de envío y recepción con un mecanismo de diferencias para que no tenga que reenviar los datos que ya se habían enviado anteriormente.

Si va a copiar algo a una máquina remota más de una vez, use rsync. En realidad, es bueno usar rsync cada vez porque tiene más controles para cosas como copiar los permisos y la propiedad de los archivos y excluir ciertos archivos o directorios. En general:

$ rsync -av /local/dir/ server:/remote/dir/

sincronizará un directorio local con un directorio remoto. Si lo ejecuta por segunda vez y el contenido del directorio local no ha cambiado, no se transferirán datos, mucho más eficiente que ejecutar scp y copiando todo cada vez.

También, rsync le permite recuperarse de transferencias interrumpidas muy fácilmente, a diferencia de scp.

Finalmente, las versiones modernas de rsync por defecto ejecuta sobre ssh, entonces si scp ya esta trabajando, rsync debería ser prácticamente un reemplazo directo


149
2018-04-29 05:11



"no se transferirán datos", excepto, por supuesto, los datos necesarios para determinar exactamente qué ha cambiado o qué no. - thsutton
Ha, sí, he pasado por alto un poco, obviamente. No estamos hablando de enredos cuánticos aquí. - Phil Hollenback
es tan triste que osx, win7 y ni siquiera ubuntu usen algo como rsync para su GUI todavía. - cregox
Dmourati he respondido a su pregunta. Le dije una mejor manera de hacerlo. - Phil Hollenback
@raphnguyen: no, eliminar archivos del directorio local no los eliminará del directorio remoto. Puede activar este comportamiento con el --delete Opción rsync. - Phil Hollenback


Eso es lo que el -r La opción es para. :)

Ver el página de manual de scp para más información si es necesario.


30
2018-04-29 04:27





Opción de copia recursiva '-r' (minúscula)

scp -r

Lo que confundo con la opción de copia recursiva local regular '-R' (mayúsculas)

cp -R

9
2017-09-11 17:53



Solo quería señalar la diferencia entre cp y scp, ya que -r y -R no son lo mismo. unix.stackexchange.com/questions/18712/… - Tarun


La mejor manera es usar rsync sobre SSH

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Mis opciones favoritas son -Pazvessh --delete:

  • -a: modo de archivo (incluye muchas opciones comunes predeterminadas, incluida la conservación de enlaces simbólicos)
  • -z: comprimir
  • -v: detallado: mostrar archivos
  • -P: muestra el progreso como archivos hechos / archivos restantes
  • -e ssh: hacer rsync en el protocolo ssh
  • --delete: borra archivos en el destino que ya no están en la fuente

4
2017-11-05 18:33



Todas las versiones de rsync que he usado usaría ssh por defecto, entonces -essh es poco probable que sea necesario. Y la elección del comando utilizado para conectarse al host remoto no está realmente relacionada con la copia recursiva. - kasperd


Después de buscar la bandera de copia recursiva y utilizarla con éxito gracias a esta publicación, me gustaría publicar solo una sugerencia.

Si el caso es que está copiando (recursivamente) un directorio. Tal vez si los archivos se envían comprimidos, podría ahorrar tiempo en la transferencia.

Lo que hice al final fue:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

Espero que esto ayude


3
2018-06-06 18:00



la extensión del archivo debe ser cualquiera .tar.gz o .tgz ya que el archivo es un archivo comprimido comprimido con gzip (ya que -z bandera se utiliza). - anthonybell


Puede copiar recursivamente un directorio en un archivo comprimido con este simple comando:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Por ejemplo, para copiar contenidos de /var/log desde domain.com a ~/logs.tgz tu corres:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

También puede extraer archivos en el sistema de destino utilizando tuberías. Este comando copiará el contenido de /var/log a domain.com a ~/destination/log en su sistema:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Aunque para reflejar un directorio, probablemente deberías usar rsync...


1
2018-01-06 07:20





Si prefiere pasar la contraseña del usuario como un parámetro en lugar de ingresarla interactivamente, puede usar sshpass(sudo apt-get install -y sshpass).

Ejemplo:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0
2018-01-06 06:49





Otra opción (probablemente mejor para uso repetido) es usar NFS: echa un vistazo a nfs-kernel-server y cómo configurar los recursos compartidos de NFS.


-2
2017-08-11 22:08



Esto es un completo disparate. Hay un sinfín de casos donde usarías scp Pero NFS no es una opción. - Sven♦