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.


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:pass@server.com/

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.

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://user@server.com. 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.

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

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.


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.


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/


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.


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.


3

wget -r ftp://url

Funciona perfectamente para Redhat y Ubuntu


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


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  *

99
Abajo0 votado: mget no es recursivo.
Lance Cleveland
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.