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


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


$baseseen{$path. $riame. $der rivations{$suf fix}});

# если файл (или ссылка на файл) существует и имеет ненулевой размер

return 1 if (-s $name $derivations{$su '.,ffix} &&

++$baseseen

{

Вот как выполняется эта подпрограмма:

  1. &File: : Basename: : fileparse() используется для выделения из пути имени файла, пути к файлу и его суг)ффикса (например resume.dvi, /home/cindy/docs/, .dui).
  2. Затем суффикс файла проверяется, чтобы определить, считаем мы этот файл производным или нет. Если нет, мы возвращаем значение 0 (т. е. «ложь» в скалярном контексте).
  3. Затем мы проверяем, встречался ли нам файл, исходный (base file) по отношению к данному, и если да, то возвращаем значение «истина». В некоторых ситуациях (в частности, в случае с TeX/LaTeX), из одного исходного файла можно получить несколько производных. Такая проверка ускоряет выполнение сценария, т. к. мы в этом случае избавлены от обхода файловой системы.
  4. Если мы не встречали раньше исходный файл (с тем же именем, но другим расширением), то проверяем, существует ли он и больше ли нуля его размер. Если да, мы сохраняем информацию о файле и возвращаем 1 (т. е. «истина» в скалярном контексте).

Теперь нам остается только вывести информацию, которую мы собрали при обходе файловой системы:

foreach my $path (keys %core){

print "Найден core-файл, занимающий -1.&BytesToMeg($core{$path}).

"MB в ",&File::Basename::dirname($path).".\n": }

if (keys %emacs){

print

"Следующие файлы, скорее всего, являются резервными копиями, созданными emacs:\n";

# изменяем путь, чтобы

# вывод был аккуратнее print "$path ($emacs{$path} байт)\"

}

print "\пОни занимают ".&BytesToMeg($tempsize)."MB в сумме."; $tempsize=0; }

if (keys %tex){

print "Следующие файлы, скорее всего, можно получить заново, если

# вывод был аккуратнее print "$path ($tex{$path} байт)":

}

print ЛпОни занимают ".&BytesToMeg(Stempsize),"MB в сумме.\п": $tenipsize=0: }




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