it-swarm-es.com

¿Puede scp copiar directorios de forma recursiva?

Actualmente solo puedo copiar un solo .tar archivo. Pero, ¿cómo puedo copiar directorios de forma recursiva con scp?

610
kernel

Sí, usa -r:

scp -rp sourcedirectory [email protected]:/path
  • -r significa recursivo
  • -p conserva los tiempos de modificación, tiempos de acceso y modos del archivo original.

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

981
dmourati

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

Si va a copiar algo en 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 permisos y propiedad de 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 copiar todo cada vez.

Además, rsync le permite recuperarse de transferencias interrumpidas muy fácilmente, a diferencia de scp.

Finalmente, las versiones modernas de rsync por defecto se ejecutan sobre ssh, por lo que si scp ya está funcionando, rsync debería ser un reemplazo directo.

177
Phil Hollenback

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

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

34
HedgeMage

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

scp -r

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

cp -R
12
Tarun

La mejor manera es usar rsync sobre SSH

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

Mis opciones favoritas son -Pazvessh --delete:

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

Después de buscar el indicador de copia recursiva y utilizarlo 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 [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

Espero que esto ayude

4
user9869932

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

ssh -p 22 [email protected]  '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 [email protected]  'cd /var && tar zcvf - log' > ~/logs.tgz

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

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

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

2
Anubioz

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

Ejemplo:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1

Puede usar la opción -r con el comando scp para copiar directorios de forma recursiva en cualquier sistema. Si necesita algo más, consulte tutorial del comando scp . La opción -r significa operación recursiva en la mayoría de los comandos de Linux.

0
atthik