13.4 Рекурсивный поиск и копирование файлов contents

Подраздел


13.4 Рекурсивный поиск и копирование файлов

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).

Во всех случаях полезно точно оценивать объ©м копируемых данных, а также уровень, на который вырастет загрузка вашей компьютерной сети, ДО того, как вы нач©те копирование.

13.4.1 Следование ссылкам (линкам)

Когда производится рекурсивный поиск и копирование, полезно ограничивать копирование информации, в которой вы не нуждаетесь.

Например, если вы хотели бы иметь копию страниц какого-то проекта, вы, возможно, не захотите иметь копии страниц других проектов, на которые могут быть ссылки на интересных для вас страницах. Wget имеет несколько механизмов для точного отбора, какие линки должны приниматься во внимание, а какие - нет.

13.4.1.1 Относительные ссылки

Когда вы используете только относительные линки (параметр -L), рекурсивный поиск и копирование никогда не сменит хост, т.е. копирование будет иметь место лишь с одного сервера. Не будет производиться лишних поисков новых им©н хостов через серверы DNS, тем самым работа по копированию будет производиться быстрее. такой режим часто будет отвечать вашим интересам, поскольку много документов типа HTML получены пут©м использование разнообразных конвертеров x2html, а они, обычно, генерируют относительные линки.

13.4.1.2 Проверка им©н серверов

Недостаток следования только относительным ссылкам очевиден. Часто авторы смешивают относительные линки с абсолютными на одном и том же сервере и, даже, на одной и той же странице. В режиме проверки им©н серверов, который включен по умолчанию, будут приниматься во внимание лишь те URL, которые указывают на тот же хост.

Проблемы могут быть и здесь для Wget нет никакого способа догадаться, что dbserv.pnpi.spb.ru и www.pnpi.spb.ru есть один и тот же хост. Когда встречается абсолютный линк, то производится поиск с обращением к серверу DNS. Даже, учитывая, что ответы сервера запоминаются в кэше, это весьма замедляет копирование файлов.

Чтобы избежать таких задержек, можно использовать параметр -nh, который выключает обращение к DNS серверу во время копирования файлов. Тем самым, процедура копирования ускорится, но останется риск, что абсолютные ссылки на один хост будут рассмотрены как ссылки к двум разным хостам.

Заметим, кроме того, что современные HTTP серверы допускают один IP адрес для нескольких виртуальных серверов, каждый из которых имеет собственную иерархию каталогов. Такие серверы различаются по именам хостов (каждый сервер имеет сво© имя хоста), каждый из которых указывает на один IP адрес. В таком случае бесполезно обращаться с одним и тем же именем хоста, значит параметр -nh должен быть включен.

Другими словами, параметр -nh должен использоваться для организации поиска и копирования с виртуальных серверов, которые различаются лишь именами хостов. Поскольку число таких серверов раст©т, то в будущем такой режим станет стандартным умолчанием.

13.4.2 Контроль им©н доменов

Параметр -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 с разрешением смены хостов.

13.4.2.1 Все хосты

Когда параметр -H определяется без параметра -D, то все хосты могут быть приняты во внимание при следовании ссылкам. Нет никаких ограничений какая бы часть мировой сети не была задействована для поиска и копирования файлов, исключая максимальную глубину рекурсии. Это может повлечь мощнейший поток данных, например, если в качестве отправной точки использовался www.yahoo.com. Такая возможность весьма редко оказывается полезной сама по себе без связи с другими ограничениями.


13.4.3 Типы файлов

Когда загружаются файлы из мировой паутины, вы можете захотеть ограничить поиск лишь отдельными типами файлов. Например, вы может интересоваться статьями и не интересоваться картинками из Интернет.

Wget предлагает два варианта решения такой проблемы. Каждый вариант включает короткие имена параметров, длинные имена параметров, а также их эквиваленты в файле .wgetrc .

-A acclist
-accept acclist
accept = acclist
Значение параметра -accept представляет собой список окончаний им©н файлов или шаблонов, которые Wget будет рекурсивно искать и копировать. Окончание представляет собой конечную часть имени файла, например, .gif или .ps. Шаблон представляет собой вариант регулярного выражения подобно тем, что используются в оболочках, например, man*[3-7]*. Таким образом команда
wget -A ps,pdf http://www.cern.ch
будет искать и копировать файлы в форматах PostScript и PDF, в то время как команда
wget -A man*[3-7]* http://www.cern.ch
будет искать файлы с именами, удовлетворяющими шаблону. Среди таких могут оказаться файлы с именами: manual41 или manpower75.ps. Последняя форма записи параметра accept = acclist используется в файле .wgetrc.

Любое количество окончаний или шаблонов могут быть перечислены через запятую.

-R rejlist
-reject rejlist
reject = rejlist
Параметр -reject действует таким же образом как -accept, только с противоположным смыслом: Wget будет загружать файлы с любыми именами, исключая файлы, имена которых перечисленные в списке или удовлетворяют шаблону. Последняя форма параметра reject = rejlist используется в файле .wgetrc.

Таким образом, комбинируя эти параметры можно весьма точно настроить работу программы Wget, чтобы, с одной стороны, получить все необходимые файлы, и минимизировать сетевой трафик и время передачи - с другой.

Заметим в заключение, что данные параметры не действуют на файлы типа HTML; Wget должна загрузить все файлы типа HTML, чтобы понять куда двигаться дальше - без этого рекурсивный поиск теряет смысл.


contents
Обновлено: 16.03.2015