Cómo descargar recursivamente una carpeta a través de FTP en Linux [cerrado]

325

Estoy tratando de ftp una carpeta usando la línea de comando ftp client, pero hasta ahora solo he podido usar 'get' para obtener archivos individuales.

Charles Ma
fuente
55
la respuesta correcta es del 6 de abril de 11 a las 14:13 por lkuty. No lo use mget, no es recursivo en absoluto. la respuesta del 22 de septiembre de 08 a las 9:01 Thibaut Barrère es más fácil de entender pero debe agregar la opción -l 0como se menciona en los comentarios
chriscatfr

Respuestas:

635

Puede confiar en wget, que generalmente maneja ftp get correctamente (al menos en mi propia experiencia). Por ejemplo:

wget -r ftp://user:[email protected]/

También puede usar el -mque sea adecuado para duplicar. Actualmente es equivalente a -r -N -l inf.

Si tiene algunos caracteres especiales en los detalles de la credencial, puede especificar los argumentos --usery --passwordpara que funcione. Ejemplo con inicio de sesión personalizado con caracteres específicos:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDITAR Como lo señaló @asmaier, tenga cuidado de que incluso si -res por recursividad, tiene un nivel máximo predeterminado de 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Si no quieres perderte las subdirecciones, mejor usa la opción de duplicación -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.
Thibaut Barrère
fuente
121
Mejor uso wget -m( --mirror). wget -restá limitado a una profundidad de recursión de 5 por defecto.
asmaier
13
Tuve que usar --usery --passwordtambién en Red Hat. Mi wget es: GNU Wget 1.11.4 Red Hat modifiedme pregunto si es una cosa de versión o de distro ...
devin
61
Puede ajustar el nivel de recursividad infinita con -l 0, por lo que no hay necesidad de usar --mirrorque puede tener algunos efectos secundarios no deseados, tales como archivos .listing
Hnatt
28
Yo uso wget --ask-password -rl 99 ftp://[email protected]. De esta forma, la contraseña no es visible psy no permanece en el historial. Por supuesto, por la naturaleza de ftp, se envía sin cifrar al servidor.
Walter Tross
77
Recordatorio para bash newbs: tendrás que usar comillas simples si tu nombre de usuario o contraseña tienen caracteres de control (como $), por ejemplo--user='user' --password='pa$$word'
tobek
164

Solo para complementar la respuesta dada por Thibaut Barrère.

solía

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Tenga en cuenta la doble barra después del nombre del servidor. Si no coloca una barra inclinada adicional, la ruta es relativa al directorio de inicio del usuario.

  • -nH evita la creación de un directorio con el nombre del servidor
  • -nc evita crear un nuevo archivo si ya existe en el destino (solo se omite)
  • --cut-dirs=5permite tomar el contenido del directorio / absolute / path / to / y colocarlo en el directorio donde inicia wget. El número 5 se usa para filtrar los 5 componentes de la ruta. La doble barra significa un componente adicional.
Ludovic Kuty
fuente
3
Brillante. La capacidad de omitir archivos que ya existen es excelente para ponerse al día con las últimas incorporaciones en la migración de un servidor. rsync es más eficiente y flexible, pero a veces esa opción simplemente no está disponible y solo se puede usar FTP.
Jason
Parámetros agradables aquí especialmente -nc y --cut-dirs. ¡Gracias por compartir!
Lance Cleveland
2
No siempre confío en "omitir archivos existentes" porque uno de los dos puede ser incompleto o diferente en tamaño y contenido, pero bueno, mencionó la opción
Daniel W.
Incluso hoy, sigo usando este comando wget cuando no puedo usar rsync. ¡Los directorios -nc y --cut-dirs son muy útiles!
Medio loco el
44
¡Increíble! Y si no desea poner su contraseña en la línea de comando, puede usar --ftp-user=USERy --ask-password.
Shoover
25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
Vinko Vrsalovic
fuente
No pude acceder a un servidor FTP usando los parámetros, pero utilizando la estructura open ftp://USERNAME:PASSWORD@HOSTdespués de comenzar ncftp ...
feeela
+1: Sé que esta publicación es antigua, pero acabo de encontrarla y ncftp fue realmente fácil de usar. Solía ​​-R para conseguir recursivo con ncftpget
Zack Macomber
definitivamente más confiable que wget, y más rápido también en modo TAR. ¡Gracias!
lencinhaus
3
Esto no funciona como se indica en Ubuntu 14.04. La sintaxis que funcionó para mí fue "get -R directory" en lugar de mget.
Ivan
Trabajó para mí en Ubuntu 14.04. No tuve que recordar que todo estaba allí.
ashley
22

Si lftpestá instalado en su máquina, use mirror dir. Y ya terminaste. Vea el comentario de Ciro a continuación si desea descargar recursivamente un directorio.

Dilawar
fuente
77
por cierto, mirror -R dircarga / actualización recursiva de directorios
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
También se puede utilizar mirror ./para descargar todos los archivos y carpetas de forma recursiva en la ruta actual.
Nabi KAZ
También puede simplemente escribir mirror, para el directorio actual y sus subcarpetas.
Michael
18

Si puede usar en scplugar de ftp, la -ropción lo hará por usted. Verificaría si puede usar un mecanismo de transferencia de archivos más moderno que FTP.

Greg Hewgill
fuente
2
Lo voté porque fue exactamente mi primer pensamiento, aunque no responde estrictamente la pregunta tal como está.
metao
¿Cuál propones @ greg-hewgill? Tengo un problema similar
Michal Gonda el
1
scpaún intentará usar ssh, que no funcionará si solo tiene credenciales FTP. Se siente raro responder a un comentario de 2008 diciendo que la tecnología que estoy atascado con moderna no es :( bueno de 2008, que cumplió 18 años el día que envió su comentario.
aexl
7

Hay 'ncftp' que está disponible para su instalación en Linux. Esto funciona en el protocolo FTP y se puede usar para descargar archivos y carpetas de forma recursiva. Funciona en Linux. Se ha utilizado y funciona bien para la transferencia recursiva de carpetas / archivos.

Consulte este enlace ... http://www.ncftp.com/

Cifrar
fuente
2
ncftp también funciona en Windows
Ilya
¡Amo ncftp! Gracias.
Jocull
3

Si puede, le sugiero encarecidamente tary bzip(o gziplo que sea que flote su barco) el directorio en la máquina remota: para un directorio de cualquier tamaño significativo, el ahorro de ancho de banda probablemente valdrá la pena el tiempo para comprimir / descomprimir.

Hank Gay
fuente
Tal vez en 2008, pero en 2013 el ancho de banda ya no importa y es posible que tenga FTP pero no acceso a la consola :-)
Daniel W.
3

Si desea apegarse a la línea de comando FTP, debe probar NcFTP. Luego puede usar get -R para obtener una carpeta de forma recursiva. También obtendrá finalización.

Jazz
fuente
3

wget -r ftp://url

Funciona perfectamente para Redhat y Ubuntu

Phillip
fuente
1

No deberías usar ftp. Al igual telnetque no está utilizando protocolos seguros, y las contraseñas se transmiten en texto claro. Esto hace que sea muy fácil para terceros capturar su nombre de usuario y contraseña.

Para copiar directorios remotos de forma remota, estas opciones son mejores:

  • rsynces la herramienta más adecuada si puede iniciar sesión a través de ssh, ya que solo copia las diferencias y puede reiniciarse fácilmente en el medio en caso de que se rompa la conexión.

  • ssh -r es la segunda mejor opción para copiar recursivamente estructuras de directorios.

Ver:

  • página de manual de rsync

  • ssh man page

Tilo
fuente
no es seguro, solo ftp
JosFabre
es 2015. FTP no debe usarse.
Tilo
2
Estoy de acuerdo. Y siempre se deben dar sugerencias para una mejor seguridad. Pero la pregunta era sobre FTP, por lo que decir que uno no debe usarlo no está ayudando
JosFabre
Respetuosamente no estoy de acuerdo. Están utilizando la herramienta incorrecta para el trabajo. Deben aprender a usar herramientas seguras y actuales, en lugar de ftp de 1980. Más específicamente, ya nadie debería ejecutar un servidor ftp: P
Tilo
44
Lo siento, pero la semana pasada estaba accediendo a un servidor que solo tenía conectividad FTP. Mi tarea era migrar lejos de ella.
Antti Haapala
-6

alternar la solicitud mediante el comando PROMPT.

Uso:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
Rohit
fuente
99
Abajo0 votado: mget no es recursivo.
Lance Cleveland