Pregunta Usando wget para descargar recursivamente directorios FTP completos


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 de 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 compuesto.

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


87
2018-06-13 09:21


origen


Tenga en cuenta que, de forma predeterminada, wget -r tiene una profundidad de recursión máxima de 5; si tiene subdirectorios más profundos, se ignorarán a menos que cambie esto (vea -l en la página del manual). - mikewaters


Respuestas:


Tratar -m para --mirror

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

119
2018-06-13 10:04



Por razones de seguridad, sería bueno usar --ask-password para evitar que la contraseña se mantenga en history. - checksum
Esto es genial. Trabajado como un encanto.. - Sambhav Sharma
Esta debe 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.


Lo tienes bien, solo necesitas un final * al final:

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

Para servidores compartidos, puedes 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 tiene ftp-username algo como nombredeusuario @ nombre de host, entonces el primer comando wget no funciona, y el segundo comando funciona bien.


36
2018-06-22 12:35



Esto solo iría a un directorio deep.Better para usar la marca -m - SvennD
en algunos casos, el segundo comando no funciona debido al espacio. Puede usar el primer comando para compartir el alojamiento de esta manera. ** wget -r ftp: / / username% 40host: contraseña @ host / dir / ** - Wasim A.
Nota: debes usar cualquiera -m o -r -l inf porque -r tiene una profundidad de recursión predeterminada de 5. Ver gnu.org/software/wget/manual/… - ndemou


Además de wget, también puedes 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 origen remoto desde donde se pueden descargar los datos.


6
2018-06-13 18:04





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


5
2018-06-13 21:22



curlftpfs tiene importantes problemas de rendimiento en este momento a menos que bajes libcurl3-gnutls - Hengjie


Verifique el comando wget a continuación 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 descargar recursivamente.

-np: No es para 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 padre. El valor de esta opción será diferente para su comando.

Puedes comprobarlo ejecutando el comando anterior.


4
2017-07-24 04:48





Utilice -m en lugar de -r, debido a la profundidad de la recursión.

http://www.editcorp.com/Personal/Lars_Appel/wget/wget_2.html#SEC11


3
2018-06-17 11:56





Debería intentarlo:

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

2
2018-06-13 09:54





Utilizar:

wget -m ftp://192.168.0.1

y reflejará todos los archivos y carpetas.


2
2018-06-13 14:07



Como dije, el inicio de 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 Así que cuando ejecuto el comando que sugirió, solo obtengo el contenido de / home / admin Traté de 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 puede intentar crear un enlace simbólico a / var / www / html debajo de su hogar. Entonces podrías usar una dirección como 192.168.0.1/html - prestomation
Intenté crear un enlace simbólico, pero resultó que wget creó un enlace simbólico similar en mi local.