¿Cómo obtengo un directorio completo en sftp?


191

Estoy aprendiendo a usar sftp y quiero copiar un directorio de la computadora remota a mi computadora local. Si lo intento

get [directory]

me da este error:

Cannot download non-regular file: /home/mpirocch/Documents

get -R tampoco funciona.


2
Put / get recursivo se agregó a OpenSSH en 5.4, que se lanzó en 2010. Puede considerar actualizar sus servidores, ya que también agrega muchas correcciones de errores y mejores características de seguridad.
Lèse majesté

Respuestas:


268

Use la -rbandera (recursiva):

get -r *

16
Gracias por dar una respuesta que realmente responde la pregunta.
jonnyflash

30
Me da:get: Invalid flag -r
ghbarratt

2
Esto también me da una bandera inválida. No estoy seguro de que esto sea compatible con todos los sistemas.
Ben

@Ben: cuando hice esta pregunta en 2009, la -rbandera no existía. ¿Su sistema está actualizado?
Matthew

15
@silvinci no todos los sistemas actuales. Opción ilegal con CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

Utilizar:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
Esto funciona, pero sería bueno poder hacer esto desde SFTP (para que pueda ver lo que copio antes de copiarlo). es posible?
Mateo

@Matthew: No lo creo. Me he estado haciendo la misma pregunta durante algún tiempo y la mejor respuesta que tengo por el momento es scp -r. O puede usar un cliente SFTP avanzado como Filezilla.
Cristian Ciupitu

1
scp -r seguirá enlaces simbólicos ...
jsleuth

55
Algunos sistemas pueden permitir sftp, pero no el scpacceso.
Turion

40

Uso lftp:

lftp sftp://user@host

Luego, dentro de lftp, cden el directorio que desea copiar, y use el mirrorcomando para descargar recursivamente el directorio seleccionado, así:

mirror

Este comando acepta opciones y argumentos:

espejo [ OPCIONES ] [ fuente [ destino ]]

Por ejemplo, la opción -R(o --reverse) hará que cargue el árbol del directorio local en el directorio remoto:

mirror -R

Vea la lftp(1)página del manual en el sitio del proyecto o en Debian.org para otros comandos y opciones.


44
¡+1 lftp es como un pequeño paquete de magia y alegría!
WCWedin

16

bueno, esta pequeña guía debería ayudar, duplicar un servidor remoto a la carpeta local con lftp

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = usa el protocolo SFTP
  • mirror = modo espejo
  • verbose = muestra los archivos que se están descargando
  • use-pget-n = número de segmentos, realmente útil para acelerar archivos grandes
  • parallel = descarga archivos multiplicadores al mismo tiempo

si desea descargar archivos en paralelo, cambie use-pget-n=8con--parallel=8

Espero que esto ayude a cualquiera que necesite duplicar una carpeta remota en una carpeta local


Gracias, esto funcionó para mí, después de que fallaron los otros métodos (en particular, ninguna opción "-r" en sftp). La primera parte del comando en mi caso necesitaba ser citada, debido a los caracteres en dólares en la contraseñalftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason

15

No use el programa sftp directamente si puede encontrar algo mejor. Para Linux, muchos administradores de archivos (al menos Nautilus y Dolphin, los de GNOME y KDE) admiten sftp de forma nativa, y siempre hay sshfs. Para Windows, hay WinSCP, y probablemente otros . El objetivo de todo esto es permitirle acceder a archivos a través de sftp como si estuvieran en un sistema de archivos normal, para que no tenga que preocuparse de que esté accediendo a ellos a través de sftp.


Wow, nautilus funciona muy bien con SFTP. Agregué un marcador en Nautilus, y ahora todo es ridículamente fácil. ¡Gracias!
Mateo

He tenido problemas de rendimiento con Nautilus SFTP. Sí, es realmente conveniente, pero no pude saturar la red de 1 Gbit / s a ​​través de Nautilus, mientras que con la sftp/sshinterfaz de línea de comando simple lo estaba (transferencias de archivos de aproximadamente 100 MB / s). Entonces el problema fue Nautilus en GNU / Linux Mint.
stamster

13

Intenta en mgetlugar de get.

Aclaración: mget se trabajará si está dentro del directorio que desea copiar; si haces algo como esto:

sftp> cd dir_to_get
sftp> mget *

obtendrá todos los archivos en ese directorio. Sin embargo, será no recursiva obtener el contenido de todos los subdirectorios.


1
mget no funciona mejor que conseguir para mí.
Mateo

1
obtener No se puede descargar un archivo no regular con esto
Dchris

1
Esto funcionó para mí en un sistema donde 'get -r' no funcionó.
Tchotchke

10
get -r [directory]

se pone [directory]y todo debajo de él, donde rsignifica recursivo. Encontré esto simplemente escribiendo helpdesde sftp.


1
OMI, esta es la mejor respuesta a esta pregunta. :)
ramrunner

3
Este es un duplicado de una respuesta del 29 de noviembre de 2010 (hace casi un año y medio).
Cristian Ciupitu

5

Como con cp:

scp -rp user@host:/path/to/dir dir

Lo anterior preservará los tiempos y modos de los archivos y subdirectorios originales. Esto es especialmente útil para la recuperación de copias de seguridad.


Esto es básicamente un duplicado de una respuesta del 29 de noviembre de 2010 (hace casi dos años).
Cristian Ciupitu

0

Tengo la carpeta Java dist en el servidor remoto, donde tengo el siguiente árbol:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

El objetivo es: ¿Quiero usar SFTP? Y ponerlos en / tmp / <>

Paso 1. sftp remoteuser @ ip

Paso 2. cd / var / tmp

Paso 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Paso 3. lcd / tmp / dist

Paso 4. mget *

Paso 5. lcd / tmp / dist / lib

Paso 6. mget *

Paso 7. finalmente tengo mi objetivo

$ ls
Audio.jar  lib  README.TXT
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.