Perl для системного администрирования


Обход файловой системы при помощи модуля File::Find


Теперь, когда вы познакомились с основами просмотра файловой системы, покажем более быстрый и изящный способ сделать то же самое. В Perl есть модуль F; ie: : Fi nd, позволяющий эмулировать команду find из Unix. Самый простой способ начать работать с этим модулем - воспользоваться командой find2perl для

генерирования кода-прототипа Perl.

С flnd2perl не всегда легко работать в Perl в отличных от Unix-системах. Для ее выполнения пользователям MacOS, например, понадобится Macintosh Programmer's Workshop (MPW) либо им придется изменить исходный код, чтобы получать ffARGV в диалоговом окне. Вот пример кода, позаимствованный у Криса Нандора (Chris Nandor), соавтора «MacPerl: Power and Ease» (MacPerl: Сила и легкость):

@ARGV = @ARGV 9 @ARGV :

split '\s". MacPerl: :Ask( "Arguments'7' );

Во всех перенесенных версиях есть модуль File; Fid, который используют команды find2perl и find.pl, так что ото не должно стать проблемой. Позже в этой главе мы покажем, как вызвать его напрямую.

Предположим, что вам нужна программа для поиска файлов beeskneen в каталоге /home. Вот командная строка, использующая команду Unix find:

% find /home -name beesknees -print

Передадим те же параметры команде

find2perl:

% find2perl /home -name beesknees -print и получим:

S'/usr/bin/oerl

eval 'exec /usr/bin/perl -S $0 ${1 + 'W}' if Srunning under some shell;

require "find.pl";

ff Обходим нужные файловые системы

&find('/home'):

exit;

sup wanted {

/"bee^kneesS/ && p--irt("$narrev' ';.

}

Код, сгенерированный командой find2perl, довольно прямолинеен. Он загружает необходимую библиотеку find.pl при помощи оператора require, затем вызывает подпрограмму &гinc() с именем начального каталога. Вскоре мы обсудим назначение подпрограммы &war'terj( ), поскольку именно здесь будут находиться все интересные изменения, которые мы хотим изучить. Перед тем как вносить изменения в этот код, важно обратить внимание на те немногие моменты, которые могут не показаться очевидными при рассмотрении приведенного фрагмента:




    Начало  Назад  Вперед


    508 Resource Limit Is Reached

    Resource Limit Is Reached

    The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.