2008-11-07 15 views
421

Tengo un directorio web donde almaceno algunos archivos de configuración. Me gustaría usar wget para tirar esos archivos y mantener su estructura actual. Por ejemplo, el directorio remoto se ve así:Usando wget para buscar de forma recursiva un directorio con archivos arbitrarios en él

http://mysite.com/configs/.vim/ 

.vim tiene varios archivos y directorios. Quiero replicar eso en el cliente usando wget. Parece que no puede encontrar el combo correcto de las banderas wget para hacer esto. ¿Algunas ideas?

Respuesta

727

Tienes que pasar la opción -np/--no-parent a wget (además de -r/--recursive, por supuesto), de lo contrario, siga el enlace en el índice del directorio en mi sitio al directorio principal. Por lo que el comando sería el siguiente:

wget --recursive --no-parent http://example.com/configs/.vim/ 

Para evitar la descarga de los archivos index.html generados automáticamente, utilice la opción -R/--reject:

wget -r -np -R "index.html*" http://example.com/configs/.vim/ 
+35

add -nH (corta el nombre de host) --cut-dirs = X (corta los directorios de X). es un poco molesto tener que contar manualmente los directorios de X .. – lkraav

+1

¿Por qué ninguno de estos funciona para http://www.w3.org/History/1991-WWW-NeXT/Implementation/? Solo descargará robots.txt – matteo

+18

@matteo porque es probable que el robots.txt no permita rastrear el sitio web. Debería agregar -e robots = off para forzar el rastreo. – gaborous

4
wget -r http://mysite.com/configs/.vim/ 

trabaja para mí.

¿Quizás tiene un .wgetrc que está interfiriendo con él?

0

Usted debe ser capaz de hacerlo simplemente añadiendo una -r

wget -r http://stackoverflow.com/ 
+8

Esto realmente no descarga un directorio, pero todos los archivos que puede encontrar en el servidor, incluidos los directorios superiores al que desea descargar. – Luc

103

Para descargar un directorio de forma recursiva, que rechaza index.html * archivos y descargas sin el nombre de host, directorio principal y toda la estructura de directorios:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data 
+0

No puedo hacer que esto funcione: wget -r -nH --cut-dirs = 3 --no-parent --reject = "index.html * "http://www.w3.org/History/1991-WWW-NeXT/Implementation/ --cut-dirs = 2 tampoco funciona Solo descarga robots.txt, que realmente está en la carpeta raíz. ¿Me estoy perdiendo? – matteo

+26

@matteo intente agregar: -e robots = desactivado – paulj

26

Aquí está el comando wget completa que trabajó para mí para descargar archivos desde el directorio de un servidor (ignorando robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/ 
4

Si --no-parent no ayuda, puede usar la opción --include.

Directorio estructura:

http://<host>/downloads/good 
http://<host>/downloads/bad 

Y quiere descargar downloads/good pero no downloads/bad directorio:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good 
28

Se debe utilizar la bandera -m (espejo), que se encarga de que no se metan a con marcas de tiempo y recurse indefinidamente.

wget -m http://example.com/configs/.vim/ 

Si añade los puntos mencionados por otros en este tema, sería:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/ 
2

a buscar un directorio de forma recursiva con nombre de usuario y contraseña, utilice el siguiente comando:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/ 
1

Wget 1.18 puede funcionar mejor, por ejemplo, me picaron errores de la versión 1.12 donde ...

wget --recursive (...) 

... solo recupera index.html en lugar de todos los archivos.

La solución fue observar algunos redireccionamientos 301 y probar la nueva ubicación, dado el nuevo URL, wget obtuvo todos los archivos en el directorio.

0

Esta versión se descarga recursivamente y no crea directorios principales.

wgetod() { 
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o/| wc -l)" 
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0)) 
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1" 
} 

Uso:

  1. Añadir a ~/.bashrc o pega en el terminal
  2. wgetod "http://example.com/x/"
0

Todo lo que necesita es de dos banderas, una es "-r" de recursividad y "--no-parent" (o -np) para no entrar en el '.' y "..". De esta manera:

wget -r --no-parent http://example.com/configs/.vim/

Eso es todo. Se descargará en el siguiente árbol local: ./example.com/configs/.vim. Sin embargo, si no desea que los dos primeros directorios, a continuación, utilizar la bandera adicional --cut-dirs=2 como se sugiere en las respuestas anteriores:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

y va a descargar su árbol de archivos sólo en ./.vim/

De hecho, Obtuve la primera línea de esta respuesta precisamente del wget manual, es un ejemplo muy claro al final de la sección 4.3.

Cuestiones relacionadas