Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите плыз со криптом... 
:(
    Опции темы
wutang
Дата 28.8.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Есть файл dir.txt со списком каталогов:

/home
/usr
......

нужен скипт который бы рекурсивно в каждом каталоге искал файли file1.txt, запоминал путь к этому файлу, и находил в file1.txt строку в которой встречается текст "www.", "mail:". Пути к найденым файлам и строки с указаным текстом записать в /tmp/search.log 


Заранее спасибо... 
 
P.S. Извените за тупой пост.... я только учусь.. 
PM MAIL   Вверх
Nab
Дата 28.8.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



Не знаю, возможно Уважаемый модер korob2001 и напишет решение, но просить делать за Вас Вашу работу считаю наглостью  smile 
А вот помочь в решении задачи или помочь выявить ошибку, самое оно... Потому как, так не научишься, надо что-либо и самому делать... Вы покажите что уже сделано, что пробовали, что не получается...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
amg
Дата 28.8.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



В общем согласен с Nab,  но по себе знаю, что начинать все же гораздо легче, если есть от чего оттолкнуться. 
Код
#!/usr/bin/perl -w

use strict; # Чтобы код был аккуратнее

# Будем использовать модуль File::Find. Этот модуль стандартный (есть в любом 
# дистрибутиве Perl. Нужен, чтобы организовать просмотр дерева директорий.
use File::Find;

# Задаем исходные значения
my $dirs = 'dirs.txt';
my $file1 = 'file1.txt';
my $log = '/tmp/search.log';
my @pattern = ('www.', 'mail:');

# Открываем файл на чтение
open (DIR, $dirs) || die "Can't read file $dirs: $!\n";
# Зачитываем содержимое файла в массив (каждая строка файла - элемент массива)
my @directories = <DIR>;
close DIR;

#  Удаляем переводы строк у каждого элемента массива
chomp @directories;

# Открываем файл на запись
open (LOG, "> $log") || die "Can't write to file $log: $!\n";

# Для каждого файла из директорий, перечисленных в @directories, а также из их
# поддиректорий, исполняем код, записанный в &wanted.
# find - это функция из модуля File::Find. См. perldoc File::Find.
find(\&wanted, @directories);

close LOG;

sub wanted {
  
  # Некоторые переменные, которые можно здесь использовать
  # $File::Find::dir   is the current directory name,
  # $_                 is the current filename within that directory
  # $File::Find::name  is the complete pathname to the file.

  if ($_ eq $file1) {  # Нужное ли имя у текущего файла
    # Если да, то записываем в лог название директории
    print LOG "$File::Find::dir : \n";
    # и открываем этот файл на чтение
    if (open FILE, $file1) {  # если удастся.
      # Читаем его построчно, при этом каждая строка по очереди заносится в $_
      # $_ будет уже своя, не та, что была раньше !
      while (<FILE>) {
        # Перебираем все подстроки, которые нужно искать, по очереди занося их в $pat
        foreach my $pat (@pattern) {
          # Если в строке $_ встречается $pat, то запишем эту строку в лог
          # Перевод строки к $_ добавлять не нужно, он уже есть (мы не делали chomp).
          print LOG if /$pat/; # То же самое, что
          # print LOG "$_" if ($_ =~ /$pat/);
        }
      }
      close FILE;
    } else {  # если не удалось открыть файл на чтение
      print LOG "Can't read file $File::Find::name: $!\n";
    }
    print LOG "\n"; # Запишем в лог пустую строку
  }
}


Это сообщение отредактировал(а) amg - 30.8.2006, 06:07
PM MAIL   Вверх
DiverD
Дата 29.8.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Кстати где та на форуме есть 2а варианта с рекурсией каталогов - воспользуйся поиском.
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
wutang
Дата 29.8.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



спасибо большое....  smile  еще раз извените, я дествительно тока начал перл учить..... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.