
Я пытаюсь загрузить сайт с помощью команды:
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?
решение1
Это может не сработать в каждом случае, но мне удалось решить эту проблему с помощью несколько неожиданного тега.
Из руководства 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
, она не будет точно соответствовать структуре удаленного каталога, но, по крайней мере, она не будет неправильно перезаписывать файлы.
решение2
Ну, решение этой проблемы с использованием только Wget практически невозможно. Позвольте мне сначала попытаться объяснить вам проблему.
Сначала Wget пытается загрузить, http://site.com/direction
. Когда Wget отправляет запрос на этот путь, сервер отвечает данными, доступными в http://site/com/example/index.html
. Однако в этот момент Wget не знает, что отправляемые ему данные соответствуют пути: example/index.html. Теперь, когда Wget находит другой файл, , http://site.com/example/11
то же самое происходит снова. Однако сначала он должен создать каталог example/ и безоговорочно удалить старый файл, чтобы сделать это. По моему мнению, Wget должен определить, заменяет ли он файл каталогом, и сохранить файл как индексный файл. Но на данный момент он этого не делает.