Usando wget para descargar recursivamente directorios FTP completos


93

Quiero copiar todos los archivos y carpetas de un host a otro. Los archivos en el host anterior se encuentran en / var / www / html y solo tengo acceso FTP a ese servidor, y no puedo TAR todos los archivos. La conexión regular al host anterior a través de FTP me lleva a la carpeta / home / admin.

Intenté ejecutar el siguiente comando desde mi nuevo servidor:

wget -r ftp://username:password@ip.of.old.host

Pero todo lo que obtengo es un archivo index.html inventado.

¿Cuál es la sintaxis correcta para usar wget recursivamente a través de FTP?


2
Tenga en cuenta que, por defecto, wget -r tiene una profundidad máxima de recursión de 5; Si tiene subdirectorios más profundos, se ignorarán a menos que cambie esto (consulte -l en la página de manual).
mikewaters

Respuestas:


125

Prueba -mpor--mirror

wget -m ftp://username:password@ip.of.old.host

15
Por razones de seguridad, sería bueno usar --ask-passwordpara evitar que se guarde la contraseña history.
suma de comprobación

Esto es genial. Trabajó como un encanto ..
Sambhav Sharma

Esta debería ser la respuesta aceptada (para una mejor visibilidad).
bgondy

no incluye la ruta del directorio para descargar, supongo que la respuesta de @Formoda es mejor
Wasim A.

@WasimA., También puede agregar la ruta del directorio aquí también:wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

Tienes razón, solo necesitas un final * al final:

wget -r ftp://username:password@1.2.3.4/dir/*

Para servidores compartidos, puede usar así:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Debido a que la mayoría de los servidores compartidos tienen ftp-username, algo así como username @ hostname, entonces, el primer comando wget no funciona y el segundo comando funciona bien.


1
Esto solo iría a un directorio de profundidad. Mejor usar la bandera -m
SvennD

en algunos casos, el segundo comando no funciona debido al espacio, puede usar el primer comando para compartir hosting de esta manera. ** wget -r ftp: / / username% 40host: contraseña @ host / dir / **
Wasim A.

Nota: debe usar cualquiera -mo -r -l infporque -r tiene una profundidad de recursión predeterminada de 5. Consulte gnu.org/software/wget/manual/…
ndemou el

7

Además de wget, también puede usar lftp en modo script. El siguiente comando reflejará el contenido de un directorio FTP remoto dado en el directorio local dado, y se puede colocar en el trabajo cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Maneja automáticamente la recursión en directorios y permite especificar el directorio de inicio de la fuente remota desde donde descargar datos.


5

Puede usar 'curlftpfs: montar un host ftp como directorio local' y, una vez montado, puede usar herramientas de archivo normales como 'cp -r'.


curlftpfstiene grandes problemas de rendimiento en este momento a menos que libcurl3-gnutls
bajes la

5

Consulte el siguiente comando wget para descargar datos de FTP de forma recursiva.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: Es para descarga recursiva.

-np: Es para ningún padre ascendente.

-nH: Es para deshabilitar la creación de un directorio con el mismo nombre que la URL, es decir, abc.xyz.com

--cut-dirs: Es para ignorar el número de directorios principales. El valor de esta opción será diferente para su comando.

Puede verificar ejecutando el comando anterior.



2

Debería intentarlo:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2

Utilizar:

wget -m ftp://192.168.0.1

y reflejará todos los archivos y carpetas.


Como dije, iniciar sesión a través de FTP me lleva a la carpeta / home / admin, y los archivos que necesito están en / var / www / html Entonces, cuando ejecuto el comando que sugirió, solo obtengo el contenido de / home / admin Intenté ejecutarlo con 192.168.0.1/var/www/html , pero luego intenta CWD / home / admin / var / www / html. ¿Cómo hago que vaya a esta carpeta desde la raíz?

No tengo experiencia con este problema en particular, pero podría intentar hacer un enlace simbólico a / var / www / html en su hogar. Entonces podría usar una dirección como 192.168.0.1/html
prestomation

Intenté crear un enlace simbólico, pero resultó con wget creando un enlace simbólico similar en mi local.

1

Esa es la sintaxis correcta. No estoy seguro de por qué no está obteniendo los resultados esperados.

Como siempre, hay más de una forma de hacerlo. Prueba ncftp, en particular ncftpget


No puedo instalar más software en mi nuevo servidor. ¿No debería decirle a wget que descargue todos los archivos de / var / www / html? Intenté wget -r nombre de usuario: contraseña@ip.of.old.host/var/www/html pero obtuve un error de directorio no encontrado.

1

Puedo entender si está intentando volcar esto en cron o algo así, pero ¿por qué no simplemente ftp en el servidor con su cliente normal y mget *? Este podría ser un camino más rápido hacia el éxito.


Intenté mget * pero no funcionó con subcarpetas, diciendo que la subcarpeta local no existe. ¿Hay alguna manera de hacer que cree las carpetas locales automáticamente?

Dependiendo de su cliente, el modificador -r generalmente hace el truco. IE: mget -r *
dr.pooter

mmm. El cliente ftp estándar AFAIK en Linux no está diseñado para recuperar directorios de forma recursiva. Quiero decir, no hay opción -r. otros clientes como ncftp o lftp admiten la recuperación recursiva, pero generalmente no están disponibles de forma predeterminada.
Stann

1

Como dije, iniciar sesión a través de FTP me lleva a la carpeta / home / admin, y los archivos que necesito están en / var / www / html

Creo que esto funcionará en tu caso:

wget -r ftp://192.168.0.1/../../var/www/html

0

Encontré el alojamiento de Windows con el nombre de usuario como brinkster / username, por lo que wget arrojaría un error si usa la sintaxis:

wget -m ftp://brinkster/username:password@ip.of.the.host

Para superar esto, use

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

Tuve que enfrentar esto con Windows hosting @ brinkster.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename hará el trabajo o puede agregar * en lugar de la entrada de nombre de archivo: hace que wget piense en el puerto que no es válido en su caso.


Esta respuesta a una pregunta de cuatro años con múltiples respuestas votadas no ofrece nada nuevo e incluso omite el requisito de una copia recursiva.
Sven
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.