GNU Wget способна проходить части мировой паутины (или одиночный HTTP или FTP сервер) следуя линкам имеющимся в документах и структуре каталогов. Это называется в данном случае рекурсивным поиском или просто рекурсией.
Wget разыскивает и анализирует страницу HTML данного URL, находя файлы и HTML документы, на которые имелись ссылки посредством тегов (или описателей) типа href или src. Если вновь скопированный файл также оказался типа text/html, он будет проанализирован и, если в н©м оказались ссылки, поиск будет продолжен.
Максимальная глубина, на которую может распространяться поиск определяется параметром -l (по умолчанию максимальная глубина равна 5). Смотрите также раздел 13.3.8.
Когда производится рекурсивный поиск с использованием протокола FTP, Wget будет копировать данные из данного дерева каталогов (включая все подкаталоги на заданную глубину) на удал©нном сервере, создавая локальную зеркальную копию. Просмотр FTP серверов также ограничен параметром -l.
По умолчанию, Wget будет создавать локальную копию дерева каталогов удал©нного сервера.
Рекурсивный поиск осуществляют целый ряд приложений, среди которых важным является зеркальное копирование. Оно очень удобно, когда медленная передача данных по сети может быть обойдена созданием локальной копии необходимых файлов.
Следует, тем не менее, помнить о возможных проблемах, связанных с массовым копированием с использованием рекурсии.
Может оказаться, что глубокая рекурсия породит такой поток данных, что он прекратит всякую разумную деятельность на вашем локальном сервере для всех пользователей, например, в связи с переполнением дисковой памяти. Большой поток данных может еще больше загрузить вашу сеть, а не освободить е©, как вы предполагали.
Таким образом, следует весьма внимательно относиться к использованию таких параметров, как глубина рекурсии (-l). Полезно ограничивать число попыток (-t) прочитать большие файлы и, одновременно, увеличивать интервал между попытками (-w).
Во всех случаях полезно точно оценивать объ©м копируемых данных, а также уровень, на который вырастет загрузка вашей компьютерной сети, ДО того, как вы нач©те копирование.
Например, если вы хотели бы иметь копию страниц какого-то проекта, вы, возможно, не захотите иметь копии страниц других проектов, на которые могут быть ссылки на интересных для вас страницах. Wget имеет несколько механизмов для точного отбора, какие линки должны приниматься во внимание, а какие - нет.
Когда вы используете только относительные линки (параметр -L), рекурсивный поиск и копирование никогда не сменит хост, т.е. копирование будет иметь место лишь с одного сервера. Не будет производиться лишних поисков новых им©н хостов через серверы DNS, тем самым работа по копированию будет производиться быстрее. такой режим часто будет отвечать вашим интересам, поскольку много документов типа HTML получены пут©м использование разнообразных конвертеров x2html, а они, обычно, генерируют относительные линки.
Недостаток следования только относительным ссылкам очевиден. Часто авторы смешивают относительные линки с абсолютными на одном и том же сервере и, даже, на одной и той же странице. В режиме проверки им©н серверов, который включен по умолчанию, будут приниматься во внимание лишь те URL, которые указывают на тот же хост.
Проблемы могут быть и здесь для Wget нет никакого способа догадаться, что dbserv.pnpi.spb.ru и www.pnpi.spb.ru есть один и тот же хост. Когда встречается абсолютный линк, то производится поиск с обращением к серверу DNS. Даже, учитывая, что ответы сервера запоминаются в кэше, это весьма замедляет копирование файлов.
Чтобы избежать таких задержек, можно использовать параметр -nh, который выключает обращение к DNS серверу во время копирования файлов. Тем самым, процедура копирования ускорится, но останется риск, что абсолютные ссылки на один хост будут рассмотрены как ссылки к двум разным хостам.
Заметим, кроме того, что современные HTTP серверы допускают один IP адрес для нескольких виртуальных серверов, каждый из которых имеет собственную иерархию каталогов. Такие серверы различаются по именам хостов (каждый сервер имеет сво© имя хоста), каждый из которых указывает на один IP адрес. В таком случае бесполезно обращаться с одним и тем же именем хоста, значит параметр -nh должен быть включен.
Другими словами, параметр -nh должен использоваться для организации поиска и копирования с виртуальных серверов, которые различаются лишь именами хостов. Поскольку число таких серверов раст©т, то в будущем такой режим станет стандартным умолчанием.
Параметр -D позволяет определить имена доменов, которые будут
приняты во внимание при поиске и копировании файлов.
Хосты домена, который не включ©н в список, не будут просматриваться
посредством сервера DNS.
Так, если вы определили -Dmit.edu, чтобы гарантировать, что
ничего
не будет копироваться с серверов вне университета MIT.
Это очень важно и полезно.
Параметр -D не подразумевает параметра -H (разрешить переходы
с хоста на хост), который должен
определяться отдельно.
Таким образом, вы могли бы вызвать
wget -r -D.gov http://www.fnal.gov/
чтобы гарантировать, лишь хосты типа .gov будут приняты во внимание
в данной операции поиска и копирования.
Другой пример
wget -r -H -Dmit.edu,stanford.edu http://www.mit.edu/
поиск начн©тся с хоста www.mit.edu, а продолжится, следуя ссылкам,
лишь в доменах mit.edu и stanford.edu.
Имеется возможность специально исключить некоторые домены с помощью
параметра -exclude-domains, который принимает те же типы
значений,
что и параметр -D, но исключает все домены, имеющиеся в списке.
например, если вы желаете копировать все линки с любых хостов домена foo.org, исключая sun.foo.org, то можно было бы написать
wget -rH -Dfoo.org -exclude-domains sun.foo.org \
http://www.foo.org/
Интерпретация такой записи проста: начиная с хоста www.foo.org
рекурсивно следовать всем линкам в домене foo.org, исключая субдомен
sun.foo.org с разрешением смены хостов.
Wget предлагает два варианта решения такой проблемы. Каждый вариант включает короткие имена параметров, длинные имена параметров, а также их эквиваленты в файле .wgetrc .
man*[3-7]*
. Таким образом команда
Любое количество окончаний или шаблонов могут быть перечислены через запятую.
Заметим в заключение, что данные параметры не действуют на файлы типа HTML; Wget должна загрузить все файлы типа HTML, чтобы понять куда двигаться дальше - без этого рекурсивный поиск теряет смысл.