¿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.

Mateo
fuente
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 *
mani-fresh
fuente
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
Cristian Ciupitu
fuente
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.

bshanks
fuente
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:[email protected]: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

nwgat
fuente
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:[email protected]: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.

Ryan Thompson
fuente
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.

Ken Keenan
fuente
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.

drkvogel
fuente
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.

Azirafa
fuente
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
Yum Yum Yum
fuente