wget для клонирования веб-сайта со ссылками на каталог, а не index.html - PullRequest
1 голос
/ 02 февраля 2012

Я бы хотел клонировать блог WordPress с помощью wget, чтобы включить его в качестве статического содержимого в веб-приложение, которое я пишу.

В настоящее время я использую следующее для клонирования сайта:

wget -rk http://sitename.com

Это работает хорошо, но ссылки в сгенерированном html указывают на файл index.html. Я хотел бы, чтобы эти ссылки указывали на каталог, содержащий файл.

например. для страницы http://sitename.com/blog-post-about-cats/ wget создает каталог "blog-post-about-cats" и помещает туда файл index.html. Ссылки на этот пост пишутся как "../blog-post-about-cats/index.html", где я хочу, чтобы они были "../blog-post-about-cats/".

Полагаю, я хочу этого, потому что я думаю, что index.html в URL выглядит немного ужасно, и все эти страницы посвящены представлению.

Есть идеи? Возможно ли это с помощью wget или другого инструмента командной строки?

Спасибо.

1 Ответ

2 голосов
/ 02 февраля 2012

Я предполагаю, что wget по умолчанию этого не делает, поскольку ваш локальный веб-сервер может быть настроен на обслуживание страниц индекса для каталогов, а не index.html.Самое простое решение состоит в том, чтобы впоследствии обработать все извлеченные HTML-файлы с помощью регулярного выражения:

find -name '*.html' | xargs sed -rie 's/href="([^"]*)\/index\.html"/href="\1\/"/gi'

Если страницы на этом сайте представляют собой файлы другого типа, например, файлы .php, замените «* .php».или что угодно.Функция регулярного выражения состоит в том, чтобы идентифицировать строки в форме href = "stuff / index.html" и удалить index.html.Xargs и find используются для применения этого ко всем страницам, а флаг "-i" для sed позволяет изменять файлы на месте.Флаги «gi» в регулярном выражении заменяют все вхождения и учитывают регистр (так как HTML не учитывает регистр).

...