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


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


# находим домашний катало; пользователе

chdir($hO!!ied! r) or

die "Невозможно войти в хк, домашний каталог Shoinodi':$!";

$1=1; # не буферизованный вывод в STDOUT print "Поиск";

find(\&wanted. "."), # проходим по каталогам, &wanted выполняет

# всю работу

Вот как выглядит вызываемая нами подпрограмма &wanted(). Сначала она ищет core-файлы, а также резервные копии и автосохраненные файлы, остающиеся после редактирования в emacs. Мы считаем, что эти файлы можно удалить, не проверяя существование исходных файлов (вероятно, это небезопасное предположение). Если такие файлы найдены, их размеры и пути к ним сохраняются в хэше, ключами которого являются пути к файлам, а значениями - размеры этих файлов.

В остальной части подпрограммы подобным образом отыскиваются производные файлы. Мы вызываем подпрограмму uBascFiiotx, для того чтобы убедиться, что эти файлы можно получить из других файлов этого же каталога. Если подпрограмма возвращает значение «истина», мы сохраняем имя файла и его размер для последующего использования:

sub wanted {

ищем core-файлы, сохраняем их и возвращаемся $_ eq "core" &&

($core{$File ::Find :: n came} = (siai( })[7]) && return;

# ищем резервные копии и автосохраненье после редактирования файла

($emacs{$File::Find::name} = (stat(_) ))[?]) &&

return;

&& ($tex{$File: :Find: :name} = (stat) && return;

# ищем производные файлов

&BaseFileExists($File::Find::name) &&

($doto{$File::Find::name} = (stat(__))[7J) && return;

Вот текст подпрограммы, проверяющей,

можно ли получить данный файл из другого файла в этом же каталоге

(например, существует ли файл happy, если мы нашли файл );

sub BaseFileExists {

my($name,$path,Ssuffix) = &File::Basename::fileparse($_[0], '\. . *' );

# если мы не знаем, как получить файл этого типа return

unless (defined Sderivations-1 ;{$suffix});

# все просто, мы видели исходный файл раньше return 1 if (defined




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



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