Рекурсивные загрузки после перенаправления
Мои цели:
- Я хочу скачать все *.zip файлы на странице, где все соответствующие ссылки перенаправляются серверным скриптом (
*/download.php?standard=yes&file=*.zip
). - Я хочу, чтобы исходная ссылка использовалась для именования файлов, поскольку имя, данное сервером, в этом случае всегда "download.zip".
В частности, я хочу скачать карты Osm и карты отсюда: http://download.osmand.net/rawindexes/
Как мне это сделать?
Что я пробовал:
Я мог бы использовать wget
сделать что-то похожее с картами для MAPS.ME:
wget -rl1 --accept="mwm" http://direct.mapswithme.com/direct/latest/
Но в этом случае ссылки были прямыми, и с именами файлов проблем не было.
Я также пытался использовать curl -L
, но это без рекурсии и, похоже, не работает для тех переадресаций, которые используются на этой странице.
2 ответа
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 {}
В некоторых именах файлов есть "-". Поэтому скрипт для получения списка файлов должен быть заменен одним символом. Это работает для меня:
wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_-]*.obf.zip" | cut -c6-