Descargas recursivas siguientes redirecciones

3

Mis metas:

  1. Quiero descargar todos los archivos * .zip en una página donde todos los enlaces relevantes son redirecciones realizadas por un script de servidor ( */download.php?standard=yes&file=*.zip ).
  2. Quiero que se use el enlace original para nombrar los archivos, ya que el nombre dado por el servidor es en este caso siempre "download.zip".

Específicamente, quiero descargar los mapas de OsmAnd desde aquí: http://download.osmand.net/rawindexes/

¿Cómo lo hago?

Lo que intenté:

Podría usar wget Para hacer algo similar con los mapas de MAPS.ME:

wget -rl1 --accept="mwm" http://direct.mapswithme.com/direct/latest/

Pero en este caso, los enlaces eran directos y no había ningún problema con los nombres de los archivos.

También traté de usar curl -L, pero eso es sin recursión, y no parece funcionar para el tipo de redirecciones que se usan en esa página.

256shadesofgrey
fuente

Respuestas:

1

Wget funciona bien, pero debes citar la URL ya que no se ha escapado.

es decir

wget 'http://download.osmand.net/download.php?standard=yes&file=Afghanistan_asia_2.obf.zip' -O Afghanistan_asia_2.obf.zip

La opción -O controla el nombre de salida. Debería ser bastante fácil crear un script de shell que haga eso dada una lista de nombres de archivos.

Editar: Puede obtener nombres de archivos descargando la página y haciendo una búsqueda de expresiones regulares para el patrón de archivo:

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_]*.obf.zip" | cut -c6-

Que podría combinarse con xargs y canalizarse directamente a wget para descargar cada archivo:

xargs -I{} wget 'http://download.osmand.net/download.php?standard=yes&file={}' -O {}

O su comando completo de una línea (funciona en Cygwin, otros * nix pueden requerir que se juegue con comillas y xargs):

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_]*.obf.zip" | cut -c6- | xargs -I{} wget 'http://download.osmand.net/download.php?standard=yes&file={}' -O {}
nijave
fuente
1

Algunos nombres de archivo tienen "-" en ellos. Por lo tanto, el script para obtener la lista de archivos debe cambiarse con un carácter. Esto funciona para mí:

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_-]*.obf.zip" | cut -c6-
Julian Stoev
fuente