Как заставить wget конвертировать * все * загруженные ссылки в относительные?

Для того, чтобы иметь автономную версию Orales Java tutorials¹, где все ссылки на Java API должны указывать на загруженную локальную версию документов Java API, я использую следующую команду wget (смотрите, если пытаетесь: получает более 25 000 файлов):

wget -mkp -nH -nv -E --accept-regex ".*javase/8/docs/api.*|.*javase/tutorial.*" http://docs.oracle.com/javase/8/ 

К сожалению, только часть ссылок преобразуется, чтобы правильно указывать локальные файлы. Все файлы в javase/tutorial хороши, но все файлы, указывающие оттуда файлы API, загружаемые в javase/8/docs/api , не указывают на эти локальные файлы, а вместо этого указывают на онлайн-версию.

Какие-нибудь идеи, что не так?

—-

¹ Я знаю, что есть загружаемая версия учебников, но ссылки на API указывают только на онлайн-документ Java API.

One Solution collect form web for “Как заставить wget конвертировать * все * загруженные ссылки в относительные?”

Похоже, вы нашли ошибку в wget . Я попробовал несколько итераций команд wget пытаясь прибить причины. Моя первая мысль заключалась в том, что регулярное выражение заставляло wget рассматривать его как два несвязанных множества, а не связывание между ними. Я разработал версию без регулярных выражений, чтобы получить, по-видимому, те же файлы, преобразовывая параметры в длинную форму и делая их дискретными (–mirror является составной) и добавляя в файл журнала и сохраняя оригиналы:

 wget --recursive --convert-links --backup-converted --page-requisites --no-host-directories --level=inf --adjust-extension --include /javase/tutorial,/javase/tutorialJWS,/javase/8/docs/api https://docs.oracle.com/javase/8/index.html 2>&1 | tee wget.log 

Сопоставляя файлы для сравнения, я обнаружил, что это означает, что каждая ссылка, не преобразованная, была абсолютной ссылкой в ​​исходном источнике. Все первоначально относительные ссылки были сохранены относительными (на самом деле не преобразованными). Результат от wget утверждает, что он «преобразовал» файлы, о которых идет речь, но, по-видимому, были затронуты только те, которые не привязаны к якорю.

Я использовал те же параметры, что и эквивалентные – --include параметры на управляемом сайтом, установив некоторые ссылки на абсолютные, включая изображения. И получили те же результаты: только те, которые не привязывались к анкерам с абсолютными адресами, были конвертированы, абсолютные якоря не были затронуты.

Для размера вашего проекта перспектива конвертации ссылок в относительную кажется сложной, даже со сценарием. Я столкнулся с PerlMonk post Change Absolute to Relative links в файлах HTML с помощью Perl-скрипта, который направлен на проблему, с которой вы столкнулись.

Я не тестировал его, но он имеет возможность делать резервные копии в качестве защитной сетки, поэтому стоит попробовать.

Тем временем, я думаю, вы получаете привилегию сообщать об ошибке на wget . Для справки моя версия:

 $ wget --version GNU Wget 1.14 built on linux-gnu. +digest +https +ipv6 +iri +large-file +nls +ntlm +opie +ssl/openssl Wgetrc: /etc/wgetrc (system) Locale: /usr/share/locale Compile: gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/etc/wgetrc" -DLOCALEDIR="/usr/share/locale" -I. -I../lib -I../lib -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g Link: gcc -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -lproxy /usr/lib64/libssl.so /usr/lib64/libcrypto.so /usr/lib64/libz.so -ldl -lz -lz -lidn ftp-opie.o openssl.o http-ntlm.o ../lib/libgnu.a 
  • Wget с другим именем файла, но с тем же расширением
  • Сохранение нескольких URL-адресов в текстовые файлы
  • Использовать i2p или freenet в командной строке
  • Файлы труб, загруженные с помощью wget в функцию
  • Почему wget игнорирует некоторые файлы в передаче ftp?
  • Изменение разрешений по умолчанию для wget?
  • Bash: самый быстрый способ определения размеров изображения из URL-адреса
  • Зачем использовать Wget вместо браузера?
  • Как отобразить все URL-адреса в цепочке перенаправления?
  • wget сохраняет загруженные файлы как имя короткой ссылки, а не фактические имена файлов
  • Использование даты -1day с помощью wget
  • Linux и Unix - лучшая ОС в мире.