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


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


позволяющие операционной системе определить, какое

приложение создало этот файл и какого он типа. Эти атрибуты хранятся в виде четырехсимвольных строк. Например, для текстового документа, созданного приложением SimpleText, эти атрибуты будут иметь значения ttxt (для создателя) и TEXT (для типа). Из Perl (только для MacPerl) мы можем получить эту информацию при помощи функции MacPerl: :GetFileInfo(). Синтаксис ее таков:

$type = MacPerl::GetFileInfo(filename); или:

($creator,$type) = MacPerl::GetFileInfo(filename);

Чтобы найти все текстовые файлы в файловой системе MacOS, мы можем выполнить следующее:

use File::Find;

&File::Find::find(\&wanted,"Macintosh HD:");

sub wanted{ -f $_ && MacPerl;:GetFileInfo($_) eq "TEXT" &&

print "$Find::File::name\n"; }

Вы, должно быть, заметили, что это выглядит немного иначе, чем наши предыдущие примеры. Однако действует этот код точно так же. Мы просто вызываем процедуры из File: :Find напрямую, без find.pl. Кроме того, мы используем переменную $name, определенную в пространстве имен File: :Find, чтобы вывести абсолютный путь файла, а не только его имя. Взгляните на полный список переменных, определяемых File: : Find при обходе файловой системы (табл. 2.2).

Таблица 2.2. Переменные File::Find

Переменная

Смысл
$_

Имя текущего файла
$File: :Find: :dir

Имя текущего каталога
$File: : Find: : name Полный путь для текущего файла (т. е. $File: : Find :dir/$_)

Вот похожий пример, но для NT/2000:

use File::Find: use Win32::File:

&File::Find':find(\&wapted."\\");

sub wanton i -f $.. && ft значение переменной attr присваивается функцией

# Win32::File::GetAttributes (Win32: :File: :GetAttnbutes($_. Sattr)) &&

($at.tr & HIDDEN) &&

print "SFile: : Find: : narreV1",

}

Этот пример ищет по всей файловой системе на текущем диске все скрытые файлы (т. е. те файлы, у которых установлен атрибут HIDDEN). Этот код работает и на NTFS и на FAT.




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



Книжный магазин