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


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


А вот пример для файловой системы NTFS, который ищет все файлы, если к ним разрешен полный доступ для специальной группы Everyone, и выводит их имена:

use File::Find;

use Win32: : FileSecunty;

tt Определяем маску DACL для полного доступа $fullmask = Win32:

: FileSecunty: :MakeMask(FULL);

&find(\&wanted,"\\");

sub wanted {

fl Win32::FileSecurity::Get не любит файл подкачки и pagefile.sys, пропустить его

next if ($_ eq "pagefile.sys"); (-f $_) &&

Win32: :FileSecunty: :Get($_, \%users) &&

(defined $users{"Everyone"}) &&

($users{"Everyone"} == Sfullmask) &&

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

}

В вышеприведенном коде мы запрашиваем все файлы у списка контроля доступа ACL (кроме файла подкачки Windows NT). Затем мы проверяем, есть ли в этом списке запись для группы Everyone. Если есть, мы сравниваем запись Everyone со значением для полного доступа (полученным MakeMask()) и выводим абсолютный путь файла, если они совпадают.

А вот еще один пример из реальной жизни, демонстрирующий, насколько полезным может оказаться даже самый простой код. Недавно я пытался дефрагментировать (заново перестроенный) раздел NT на диске своего портативного компьютера, но все закончилось сообщением об ошибке Metadata Corruption Error (повреждение метаданных). Внимательно изучая веб-сайт производителя программного обеспечения, я нашел там замечание, что «такая ситуация может быть вызвана наличием файлов, длина имен которых превышает допустимую в Windows NT». Там было предложено найти эти файлы, копируя каждый каталог на новое место и сравнивая количество файлов в оригинале л Обход файловой системы при помощи модуля File::Find

копии. Если в копии каталога файлов меньше, необходимо найти те файлы, которые не были скопированы.

С учетом количества каталогов в моем разделе и времени, необходимого для выполнения этой процедуры, такое решение представляется просто нелепым. Вместо этого я написал следующее, используя уже обсужденные методы:

require "find.pl";




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



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