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

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?


fuente
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:[email protected]
Dave Cheney
fuente
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:[email protected]/mydir/
Alex Che
37

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

wget -r ftp://username:[email protected]/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.

Banee Ishaque K
fuente
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.

zappan
fuente
5

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

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

AVJ
fuente
2

Utilizar:

wget -m ftp://192.168.0.1

y reflejará todos los archivos y carpetas.

Rajat
fuente
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

cosa muy pegajosa
fuente
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ñ[email protected]/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.

dr.pooter
fuente
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
kubanczyk
fuente
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:[email protected]

Para superar esto, use

wget -m ftp://brinkster%2Fusername:[email protected]

Tuve que enfrentar esto con Windows hosting @ brinkster.

Anto Joseph
fuente
-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.

Khushwant Singh
fuente
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