3

Мои цели:

  1. Я хочу загрузить все файлы * .zip на страницу, где все соответствующие ссылки перенаправляются серверным скриптом ( */download.php?standard=yes&file=*.zip ).
  2. Я хочу, чтобы исходная ссылка использовалась для именования файлов, поскольку имя, данное сервером, в этом случае всегда "download.zip".

В частности, я хочу скачать карты Osm и карты отсюда: http://download.osmand.net/rawindexes/

Как мне это сделать?

Что я пробовал:

Я мог бы использовать wget чтобы сделать нечто подобное с картами для MAPS.ME:

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

Но в этом случае ссылки были прямыми, и с именами файлов проблем не было.

Я также пытался использовать curl -L , но это без рекурсии, и, похоже, он не работает для тех перенаправлений, которые используются на этой странице.

2 ответа2

1

В некоторых именах файлов есть "-". Поэтому скрипт для получения списка файлов должен быть заменен одним символом. Это работает для меня:

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

Wget работает нормально, но вам нужно указать URL, поскольку он не экранирован.

т.е.

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

Опция -O контролирует имя вывода. Должно быть довольно легко создать сценарий оболочки, который будет делать это, учитывая список имен файлов.

Изменить: Вы можете получить имена файлов, загрузив страницу и выполнив поиск по шаблону для регулярного выражения:

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

Которая может быть объединена с xargs и передана непосредственно в wget для загрузки каждого файла:

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

Или ваша полная однострочная команда (работает в Cygwin, для других * nix может потребоваться немного поиграть с кавычками и 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 {}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .