Похоже, вы обнаружили ошибку в 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
Grepping the файлы для сравнения Я обнаружил, что каждая ссылка , не преобразованная, была абсолютной ссылкой в исходном источнике. Все первоначально относительные ссылки оставались относительными (не преобразовывались на самом деле). В выводе wget
утверждается, что эти файлы «преобразованы», но, похоже, были затронуты только теги без привязки.
Я использовал те же параметры и эквивалент - включить
параметров на контролируемый мной сайт, после установки некоторых ссылок на абсолютные, включая изображения. И получил тот же результат: конвертировались только теги без привязки с абсолютными адресами, абсолютные привязки не затрагивались.
Для размера вашего проекта перспектива преобразования ссылок в относительные кажется устрашающей даже при наличии сценария. Я наткнулся на сообщение PerlMonk Изменить абсолютные ссылки на относительные в файлах 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
Вы практически не можете этого сделать (связать разделяемую библиотеку с ядром или каким-либо модулем ядра).
Ядро концептуально представляет собой автономную программу ( поэтому не знает о низкоуровневых стандартных функциях C, таких как malloc
или fprintf
, которые, скорее всего, будет использовать ваша общая библиотека). Модули ядра (файлы * .ko
) специально созданы и загружаются с помощью специального кода ядра.
Кроме того, код пользователя (включая библиотеки) основан на системных вызовах (перечисленных в syscalls (2) ), которые недоступны в коде ядра (поскольку ядро предоставляет системные вызовы для процессов , работающих в пользовательском режиме через определенное оборудование).
Вы можете подумать о том, чтобы вспомогательная программа пользовательского уровня взаимодействовала с ядром (то есть с вашим модулем ядра), например используя netlink (7) . Возможно, посмотрите также systemd .
Вам, вероятно, следует прочитать больше об операционных системах и прочитать Расширенное программирование Linux , чтобы понять аспекты, связанные с пользовательской средой.
Кстати, как показывает практика, вы должны ограничить количество кода ядра, добавляемого в систему (и предпочитать работу на уровне пользователя).