Волгоград Linux User Group
Организована 23 ноября 2002 года
Проект заморожен Птн Июл 6 02:11:14 MSD 2012
Вход:
Пароль:
ПоискФайлаВнутриRPMПакетов
Volgograd LUG
Новости
Список рассылки
Как нас найти?
Участники
Библиотека
Дистрибутивы
Проекты
Друзья
Каталог
Изменения
Новые Комментарии
Регистрация
Помощь по Wiki
#!/usr/bin/perl use English; #чтобы можно было получить идентификатор процесса # опишем имена файлов, которые будут использоватся в проге # имена файлов сделаем уникальными для каждой копии проги (чтобы можно было запускать несколько копий) $FileList = "/tmp/".$PROCESS_ID."-rpm-filelist.tmp"; $FilesInPacket = "/tmp/".$PROCESS_ID."-FilesInPacket.tmp"; #---------------------------------------------------------------------------------------------- # возвращает число строк в файле sub GetStringCount { int $Number; #кол-во строк $Number = 0; #пока еще нет строк $MeasuringFileName = @_[0]; open(INFILE, $MeasuringFileName) or die "Не могу открыть файл $MeasuringFileName : $!"; # просто пройдемся по файлу и проинкрементируем счетчик строк while(
) { $Number += 1; } close INFILE; # и возвратим кол-во строк return $Number; } #---------------------------------------------------------------------------------------------- # подчищает временные файлы и выходит из программы sub Halting { system("rm -f $FileList"); system("rm -f $FilesInPacket"); exit; } #---------------------------------------------------------------------------------------------- int $FileCount; # кол-во пакетов,найденных на диске int $Progress; # позиция прогресс-индикатора int $Counter; # счетчик файлов # очистим экран #print("\x1b[2J"); # перейдем на верхний угол экрана #print("\x1b[80F"); print " -= Программа нахождения файлов в пакетах =- \n"; # Проверим, есть ли параметры в командной строке $DiskName = @ARGV[0]; $FileName = @ARGV[1]; if(($DiskName eq "") || ($FileName eq "")) { print "Использование: GetFileFromRPM <пусть к диску> <имя файла>\n"; print "Например: GetFileFromRPM /mnt/cdrom perl\n"; exit; } print "Составление списка пакетов на диске... "; $Result = system("find $DiskName -name '*.rpm' >$FileList"); if($Result != 0) { print "\n"; print "Ошибка при составлении списка пакетов ", $!, "\n"; Halting(); } print "Ok", "\n"; print "Подсчет кол-ва пакетов для поиска... "; $FileCount = GetStringCount($FileList); print $FileCount, "\n"; if($FileCount eq 0) { print("Нет пакетов для поиска файла $FileName \n"); Halting(); } print("Поиск файла $FileName в пакетах..."); # подготовим счетчик файлов $Counter = 0; # выведем что-нить типа прогресс-индикатора #print("\n"); #print("["); # передвинемся на 50 позиций правее #print("\x1b[50a"); #print("]"); # открываем список файлов open(INFILE, $FileList); while(
) { #выведем прогресс индикатор #$Counter++; #$Progress = ($Counter / $FileCount) * 50; #print("\x1b[".$Progress."G"); #print("*"); # получим список файлов в пакете # имя файла выдается с символом \n, надо его убрать print("."); chomp(); $PacketName = $_; $Result = system("rpm -q -p -l $PacketName > $FilesInPacket"); if($Result != 0) { print("Ошибка при получении списка файлов из пакета $PacketName \n"); Halting; } # прочитаем список файлов и посмотрим, есть ли там искомый open(LIST_PACKET_FILES, $FilesInPacket); while(
) { $PacketFileName = $_; if(index($PacketFileName, $FileName) > 0) { print("\n"); print("Искомый пакет: $PacketName \n"); print("Файл: $PacketFileName \n"); Halting; } } close LIST_PACKET_FILES; } close INFILE; print("\n"); print("Что-то ничего не смог найти :-( \n"); Halting;
на мою главную страницу
[
/ Category Tips
]
Powered by
Wakka 0.1.2
|
Wacko R3.5-vlug