Ответ 1
Похоже, что wget
был разработан для работы. При выполнении рекурсивных загрузок файлы без листа, соответствующие списку отклонения, по-прежнему загружаются, поэтому их можно собирать для ссылок, а затем удалять.
Из комментариев в коде (recur.c):
Была указана либо опция -delete-after, либо мы загрузили этот в противном случае отклонено (например, -R) HTML файлом, так что мы может собрать свои гиперссылки - в любом случае, удалить локальный файл.
У нас был обкатка с этим в прошлом проекте, где нам пришлось зеркально отразить сайт, прошедший проверку подлинности, и wget
продолжает удалять страницы выхода из системы, даже когда он должен был отклонить эти URL-адреса. Мы не смогли найти никаких вариантов для изменения поведения wget
.
Решение, с которым мы столкнулись, заключалось в загрузке, взломать и построить собственную версию wget
. Вероятно, более элегантный подход к этому, но быстрое исправление, которое мы использовали, заключалось в том, чтобы добавить следующие правила в конец download_child_p()
подпрограммы (измененный в соответствии с вашими требованиями ):
/* Extra rules */
if (match_tail(url, ".pdf", 0)) goto out;
if (match_tail(url, ".css", 0)) goto out;
if (match_tail(url, ".gif", 0)) goto out;
if (match_tail(url, ".txt", 0)) goto out;
if (match_tail(url, ".png", 0)) goto out;
/* --- end extra rules --- */
/* The URL has passed all the tests. It can be placed in the
download queue. */
DEBUGP (("Decided to load it.\n"));
return 1;
out:
DEBUGP (("Decided NOT to load it.\n"));
return 0;
}