Usando wget para buscar recursivamente un directorio con archivos arbitrarios


573

Tengo un directorio web donde almaceno algunos archivos de configuración. Me gustaría usar wget para extraer esos archivos y mantener su estructura actual. Por ejemplo, el directorio remoto se ve así:

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

.vim contiene múltiples archivos y directorios. Quiero replicar eso en el cliente usando wget. Parece que no puedo encontrar la combinación correcta de banderas wget para hacer esto. ¿Algunas ideas?

Respuestas:


988

Debe pasar la opción -np/ --no-parenta wget(además de -r/ --recursive, por supuesto), de lo contrario, seguirá el enlace en el índice del directorio de mi sitio al directorio principal. Entonces el comando se vería así:

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

Para evitar descargar los index.htmlarchivos generados automáticamente , use la opción -R/ --reject:

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

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

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

31
@matteo porque el archivo robots.txt probablemente no permita rastrear el sitio web. Debe agregar -e robots = off para forzar el rastreo.
— Gaborous

agregue -X / absolute / path / to / folder para excluir un directorio en particular
— vishnu narayanan

3
Si no desea descargar todo el contenido, puede usar: -l1 solo descargue el directorio (example.com en su caso) -l2 descargue el directorio y todas las subcarpetas de nivel 1 ('example.com/something' pero no 'example.com/somthing/foo') Y así sucesivamente. Si inserta la opción no -l, wget usará -l 5 automáticamente. Si inserta un -l 0, descargará todo Internet, porque wget seguirá cada enlace que encuentre. stackoverflow.com/a/19695143/6785908
— so-random-dude

123

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

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

No puedo hacer que esto funcione: wget -r -nH --cut-dirs = 3 --no-parent --reject = "index.html *" w3.org/History/1991-WWW-NeXT/Implementation - -cut-dirs = 2 tampoco funciona. Solo descarga el archivo robots.txt que en realidad está en la carpeta raíz. ¿Dónde me estoy perdiendo?
— matteo

34
@matteo intenta agregar: -e robots = apagado
— Paul J

Para obtener recursivamente todos los directorios dentro de un directorio, use wget -r -nH --reject = "index.html *" mysite.io:1234/dir1/dir2
— Prasanth Ganesan el

115

Para cualquier otra persona que tenga problemas similares. Wget sigue lo robots.txtque podría no permitirle tomar el sitio. No te preocupes, puedes apagarlo:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html


Cuando ignore el archivo robots.txt, al menos debe limitar sus solicitudes. El comportamiento sugerido en esta respuesta es muy descortés.
— Nadie

@ Nadie Entonces, ¿cuál es la respuesta cortés a esto?
— Phani Rithvij

@PhaniRithvij Rate limita tus solicitudes, wget tiene parámetros para ello. Tenga en cuenta que algunas personas aún pueden tener problemas, y teniendo en cuenta que el archivo de robots le dice explícitamente que no está permitido hacer lo que está haciendo actualmente, incluso podría tener problemas legales.
— Nadie el

37

Debe usar el indicador -m (espejo), ya que se encarga de no meterse con marcas de tiempo y recurrir indefinidamente.

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

Si agrega los puntos mencionados por otros en este hilo, sería:

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

35

Aquí está el comando wget completo que me funcionó para descargar archivos del 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/

8

Si --no-parentno ayuda, puede usar la --includeopción.

Estructura del directorio:

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

Y desea descargar downloads/goodpero no el downloads/baddirectorio:

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

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

funciona para mi.

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


5

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

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

2

Wget 1.18 puede funcionar mejor, por ejemplo, me mordió un error de la versión 1.12 donde ...

wget --recursive (...)

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

La solución consistía en notar algunos redireccionamientos 301 y probar la nueva ubicación: dada la nueva URL, wget obtuvo todos los archivos en el directorio.


2

Todo lo que necesitas son dos banderas, una es "-r"para recursión y "--no-parent"(o -np) para no ir en '.'y ".." . Me gusta esto:

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

Eso es. Se descarga en el siguiente árbol local: ./example.com/configs/.vim. Sin embargo, si no desea los dos primeros directorios, utilice el indicador adicional --cut-dirs=2como se sugiere en las respuestas anteriores:

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

Y descargará su árbol de archivos solo en ./.vim/

De hecho, obtuve la primera línea de esta respuesta precisamente del manual de wget , tienen un ejemplo muy claro hacia el final de la sección 4.3.


2

La siguiente opción parece ser la combinación perfecta cuando se trata de descargas recursivas:

wget -nd -np -P / dest / dir - http recurrente : // url / dir1 / dir2

Fragmentos relevantes de páginas de manual para mayor comodidad:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

1

Debería poder hacerlo simplemente agregando un -r

wget -r http://stackoverflow.com/

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

1

Esta versión se descarga de forma recursiva 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. Agregar ~/.bashrco pegar en la terminal
  2. wgetod "http://example.com/x/"
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.