1

Я пытаюсь скачать сайт с помощью команды:

wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com

Когда он находит ссылку, например, http://example.com/direction , он создает файл на диске ./example.com/direction

Затем, например, он находит некоторые другие файлы (ссылки) в «направлении», предположим, что http://example.com/direction/11

И wget переписать старый файл ./example.com/direction с некоторым HTML и преобразовать его в каталог. И напишите новый файл ./example.com/direction/11 там.

Если он найдет новый файл внутри /direction/11 , то он также перепишет 11 и преобразует его в каталог.

Так что, похоже, я потерял все файлы каталогов.

Есть ли решение проблемы в самом wget?

2 ответа2

2

Это может работать не во всех случаях, но мне удалось решить эту проблему с помощью несколько неожиданного тега.

Из руководства wget 1.17.1:

‘-E’

‘--adjust-extension’

Если загружен файл типа ‘application/xhtml+xml’ или ‘text/html’ и URL-адрес не заканчивается регулярным выражением ‘\.[Hh][Tt][Mm][Ll]?’ эта опция приведет к добавлению суффикса ‘.html’ к локальному имени файла.

Таким образом, в вашем случае, когда wget найдет ссылку http://example.com/direction , он проверит, отформатирована ли страница в формате html. Если это так, он сохранит его на локальный диск как /example.com/direction.html . Затем, когда он видит http://example.com/direction/11 , он сохраняет его на диск как /example.com/direction/11 , таким образом, не перезаписывая первый файл. Предполагая, что истинной структурой каталогов является /example.com/direction/index.html , она не будет точно соответствовать структуре удаленных каталогов, но, по крайней мере, неправильно перезаписывает файлы.

0

Что ж, решение этой проблемы с использованием только Wget практически невозможно. Позвольте мне сначала попытаться объяснить вам проблему.

Сначала Wget пытается скачать, http://site.com/direction . Когда Wget отправляет запрос по этому пути, сервер отвечает данными, доступными по http://site/com/example/index.html . Однако на данный момент Wget не знает, что отправляемые ему данные соответствуют пути: example/index.html. Теперь, когда Wget находит другой файл, http://site.com/example/11 , то же самое происходит снова. Тем не менее, он должен сначала создать каталог example/ и безоговорочно удаляет старый файл, чтобы сделать это. IMO, Wget должен определить, заменяет ли он файл каталогом, и сохранить его как индексный файл. Но на данный момент это не так.

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