shell - tutorial - Uso de wget para obtener recursivamente un directorio con archivos arbitrarios en él
wget descargar sitio completo (12)
Aquí está el comando wget completo que me sirvió 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/
Tengo un directorio web donde almaceno algunos archivos de configuración. Me gustaría usar wget para bajar esos archivos y mantener su estructura actual. Por ejemplo, el directorio remoto se ve así:
http://mysite.com/configs/.vim/
.vim tiene múltiples archivos y directorios. Quiero replicar eso en el cliente usando wget. Parece que no se puede encontrar la combinación correcta de banderas wget para hacer esto. ¿Algunas ideas?
Debería usar el indicador -m (espejo), ya que se cuida de no meterse con las marcas de tiempo y recursionar 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/
Deberías poder hacerlo simplemente agregando un -r
wget -r http://.com/
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:
- Agregar a
~/.bashrc
o pegar en el terminal -
wgetod "http://example.com/x/"
Para cualquier otra persona que tenga problemas similares. Wget sigue el robots.txt
que podría no permitirle capturar 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
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 toda la estructura del directorio:
wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data
Para obtener 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/
Si --no-parent
no ayuda, puede usar la opción --include
.
Directorio de la estructura:
http://<host>/downloads/good
http://<host>/downloads/bad
Y desea descargar downloads/good
directorio downloads/good
pero no downloads/bad
:
wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good
Todo lo que necesita son dos banderas, una es "-r"
para la recursión y "--no-parent"
(o -np
) para no entrar en el ''.''
y ".."
. Me gusta esto:
wget -r --no-parent http://example.com/configs/.vim/
Eso es. Se descargará en el siguiente árbol local: ./example.com/configs/.vim
. Sin embargo, si no desea los dos primeros directorios, use la --cut-dirs=2
adicional --cut-dirs=2
como se sugirió 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.
Wget 1.18 puede funcionar mejor, por ejemplo, me picó un error de la versión 1.12 donde ...
wget --recursive (...)
... solo recupera index.html en lugar de todos los archivos.
La solución fue notar unos 301 redireccionamientos y probar la nueva ubicación; dada la nueva URL, wget obtuvo todos los archivos en el directorio.
-np
pasar la --no-parent
-np
/ --no-parent
a wget
(además de -r
/ --recursive
, por supuesto), de lo contrario, seguirá el enlace en el índice del directorio en mi sitio al directorio primario. 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/
wget -r http://mysite.com/configs/.vim/
funciona para mi.
¿Quizás tienes un .wgetrc que está interfiriendo con él?