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

Поиск:

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


Новичок



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

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



Здравствуйте. Есть кусман кода который должен находить файлы во вложенных каталогах где запущен скрипт:
Код

opendir(Dir, '.') || die;
my @names = readdir Dir;
closedir Dir;

foreach my $dirnames (@names) {
next if ($dirnames eq ".");
next if ($dirnames eq "..");
  if (-d $dirnames){
  print " FOUND DIR: $dirnames\n";

     opendir(Dir, "./$dirnames") || die;
     my @filenames = readdir Dir;
     closedir Dir;

     foreach my $filenames (@filenames) {
     next if ($filenames eq ".");
     next if ($filenames eq "..");
     if (-f $filenames){
     print " FOUND FILE: $filenames\n";
      }}
  next;
  }
  }


но скрипт находит только каталоги, а файлы которые находятся внутри каталога не выводит, не подскажете что поправить в коде чтобы он выводил имена файлов ?
PM MAIL   Вверх
kavkaz
Дата 30.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



пишешь функцию, в качестве аргумента она принимает имя директории, 
– проходишь по списку имен в директории, 
– если это папка, то печатаешь что это папка и вызываешь снова свою функцию, указывая уже аргументом Эту папку
– если файл - печатаешь имя файла

Это сообщение отредактировал(а) kavkaz - 30.6.2009, 13:50
PM MAIL ICQ Skype   Вверх
Зюзе
Дата 30.6.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А есть смысл городить рекурсию если мне надо найти файлы в каталогах на один уровень вниз от текущего ?

Это сообщение отредактировал(а) Зюзе - 30.6.2009, 14:07
PM MAIL   Вверх
kavkaz
Дата 30.6.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Зюзе @  30.6.2009,  13:31 Найти цитируемый пост)
который должен находить файлы во вложенных каталогах где запущен скрипт


если один уровень вложенности, то в принципе нет, вопрос, как говорится эстетики

По вашему коду:
– нашли все элементы исходной директории
– организовали цикл
   – если папка то снова ищете элементы и печатаете
   – если файл то надо печатать    –  этого пункта у вас нет

Это сообщение отредактировал(а) kavkaz - 30.6.2009, 14:15
PM MAIL ICQ Skype   Вверх
Зюзе
Дата 30.6.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Зюзе @  30.6.2009,  13:31 Найти цитируемый пост)
который должен находить файлы во вложенных каталогах где запущен скрипт


если один уровень вложенности, то в принципе нет, вопрос, как говорится эстетики

Пардон, первом посте не уточнил что просмотреть нужно на один уровень вниз.


По вашему коду:
– нашли все элементы исходной директории
– организовали цикл
   – если папка то снова ищете элементы и печатаете
   – если файл то надо печатать    –  этого пункта у вас нет

как нет  smile  а это:
Код

foreach my $filenames (@filenames) {
     next if ($filenames eq ".");
     next if ($filenames eq "..");
     if (-f $filenames){
     print " FOUND FILE: $filenames\n";
      }}



PM MAIL   Вверх
shamber
Дата 30.6.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у меня ваш скрипт выводит файлы, но только по одному на каталог smile

Добавлено через 6 минут и 4 секунды
Ошибка у вас в том, что вы пытаетесь проверить файл не указывая путь к нему....
замените 
Код

if (-f $filenames){

на
Код

if (-f "./".$dirnames."/".$filenames){

PM MAIL Jabber   Вверх
arto
Дата 30.6.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



perl -le 'print join "\n",grep { -f $_ } map { glob ("${_}*") } grep { -d $_ } @ARGV' ../*
PM MAIL ICQ   Вверх
Зюзе
Дата 30.6.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



shamber, огромное спасибо  smile  , не знал что нужно еще путь передавать....
Ставлю тему решенной smile
 


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


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

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


 




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


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

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