14

Я использую wget --mirror --html-extension --convert-links для зеркалирования сайта, но в итоге я получаю множество имен файлов в формате post.php?id=#.html . Когда я пытаюсь просмотреть их в браузере, происходит сбой, потому что браузер игнорирует строку запроса при загрузке файла. Есть ли способ заменить ? символ в именах файлов с чем-то еще?


Ответ --restrict-file-names=windows работал правильно. В сочетании с флагами --convert-links и --adjust-extension/-E (ранее называвшимся --html-extension , который также работает, но не рекомендуется), он создает зеркало, которое ведет себя так, как ожидается.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example

3 ответа3

15

Смотрите --restrict-file-names . Хотя это не совсем предназначено для этой конкретной цели, --restrict-file-names=windows , вероятно, поможет вам в этом:

--restrict-файл-имена = режимы

Изменить, какие символы, найденные в удаленных URL-адресах, должны быть экранированы при генерации локальных имен файлов. [...]

Когда задано "windows", Wget экранирует символы \, |, /,:,?, ", *, <,> И управляющие символы в диапазонах 0--31 и 128--159. В дополнение к этому Wget в режиме Windows использует + вместо: для разделения хоста и порта в локальных именах файлов и использует @ вместо? отделить часть запроса имени файла от остальных. Таким образом, URL, который будет сохранен как www.xemacs.org:4300/search.pl?input = blah в режиме Unix будет сохранен как www.xemacs.org+4300/search.pl@input=blah в режиме Windows.

2

Ваш браузер будет хорошо смотреться, если вы используете URL, например

file:///tmp/example.com/post.php%3Fid=1.html

вместо

file:///tmp/example.com/post.php?id=1.html

Примечание: если у вас возникли проблемы с внутренними ссылками из загруженных файлов, это может быть связано с тем, что вы завершили работу wget до того, как это было сделано при загрузке. Так как вы указали --convert-links и --html-extension (применяется только тогда, когда они указаны), wget обычно исправляет ссылки, чтобы использовать% 3F вместо?; тем не менее, он делает это в конце, после завершения загрузки; если он был прерван, он не исправит ни одну из ссылок, и вы останетесь в этом затруднительном положении. Конечно, вы всегда можете написать скрипт, чтобы пройти и исправить ссылки, но ...

-2

У wget нет возможности изменить сохраненное имя. Что вам, вероятно, нужно будет сделать, это создать сценарий, чтобы пройти и заменить? с _ или что-то подобное. Один только Wget не может этого сделать.

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