Если у сайта есть карта в виде файла sitemap.xml, то все страницы, перечисленные в ней, можно загрузить с помощью комбинации нескольких консольных команд.
curl -s http://noteskeeper.ru/sitemap.xml | \
grep '<loc>' | \
sed 's/^.*\(http[^<]*\).*$/\1/' | \
xargs curl >/dev/null -s
- Первой командой curl мы загружаем карту сайта.
- Затем находим в ней все теги
<loc>
, которые содержат адреса страниц, командой grep. - Извлекаем URL из найденных тегов командой sed.
- Вызываем команду curl для каждой страницы.
В моём примере выполнение загрузки происходит «молчаливо» (ключ -s
) и загруженные данные сразу же отправляются в /dev/null
.
Коментарии к заметке
А зачем это может понадобиться?
Так можно «прогреть» кеш сервера, например. Не слишком оптимально, конечно, зато просто и надёжно.
Ещё подобный трюк позволит проверить HTTP-статусы и найти страницы с ошибками.
Для создания локальных копий страниц всё-таки лучше воспользоваться командой:
Выгода заключается в том, что
wget
сам умеет повторять структуру папок на диске, а дляcurl
потребуются сложные манипуляции с аргументами. С другой стороны, рекурсивный обход сайта может не дать желаемого результата.Один минус. Если xml выстроен не валидно в плане переносов строк — вот так напр.:
то как бы такой трюк не пройдет) И… не уверен, (надо посмотреть) но возможно не пройдет, если весь xml вытянули в 1 строку.
Вытягивание в одну строку не поможет. Команда
sed
работает построчно. Там нужно придумать чуть хитрее парсинг.