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


Прогулка по файловой системе - часть 5


В Perl мы указываем встроенный ключ -s в строке вызова (#! /us г/с in, perl -s) для автоматического разбора параметров. Это самый простой способ разбора параметров, переданных в командной строке. Искушения ради, мы могли бы использовать какой-либо модуль из семейства Getopt. Если в командной строке присутствует ключ (например -г), то при запуске сценария устанавливается глобальная скалярная переменная с тем же именем (например $г). Если Perl вызывается без ключа -г, мы вернемся к старому поведению подпрограммы - она будет лишь сообщать, что найдены core-файлы.

Когда вы пишете автоматические утилиты, постарайтесь сделать так, чтобы разрушительные действия были затруднены. Учтите: Perl, как и большинство серьезных языков программирования, позволяет уничтожить файловую систему без особых усилий.

Теперь, чтобы ориентированные на NT/2000 читатели не подумали, что предыдущие примеры к ним не относятся, покажем, что эта программа может пригодиться и для них. Единственное изменение строки:

if (Sname eq "core") {

на:

if (Sname eq MSCREATE.DIR") {

позволяет создать программу, которая удалит все раздражающие скрытые файлы нулевой длины, забытые инсталляторами некоторых программ Microsoft.

Имея в запасе этот код, давайте вернемся к проблеме, с которой начиналась эта глава. После того как мой портативный компьютер приземлился на пол, средство, которое позволило бы определить, какие файлы можно прочитать с диска, а какие нет, стало необходимо мне, как воздух.

Вот какую программу я написал для этого:

use Cwd: # модуль для определения текущего рабочего каталога

$1=1; # отключаем буферизацию ввода/вывода

sub ScanDirectory {

my ($workair) = shift;

my($startdir) = &cwd;

ft запоминаем, откуда мы начали chdir($workdir)

or die "Невозможно зайти а каталог $workdir:$'\n":

opendir(DIR, ".")

or die "Невозможно открыть каталог $workdir:$!\n";

my @names = readdir(DIR);

closedir(DIR);

foreach my $name (@names){ next if ($name eq "."); next if ($name eq "..");




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



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