Usando wget para buscar recursivamente un directorio con archivos arbitrarios

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

Pregunta

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. ¿Alguna idea?

¿Fue útil?

Solución

Debe pasar la opción -np / --no-parent a 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 archivos index.html generados automáticamente, use la opción -R / --reject :

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

Otros consejos

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

Para cualquier otra persona que tenga problemas similares. Wget sigue a robots.txt que podría no permitirle acceder al sitio. No se preocupe, puede desactivarlo:

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

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

Debe usar el indicador -m (espejo), ya que se encarga de no meterse con las 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/

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/

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

Estructura del directorio:

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

Y desea descargar descargas / bueno pero no el directorio downloads / bad :

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

funciona para mí.

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

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/

Todo lo que necesita es dos banderas, una es " -r " para recursión y " - no-parent " (o -np ) para no entrar en '.' y " .. " . Así:

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 los dos primeros directorios, utilice el indicador adicional --cut-dirs = 2 como 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 de wget manual , tienen un ejemplo muy claro hacia el final de la sección 4.3.

Debería poder hacerlo simplemente agregando un -r

wget -r http://stackoverflow.com/

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.

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. Añadir a ~ / .bashrc o pegar en el terminal
  2. wgetod " http: //example.com/x/"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top