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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дерево каталогов ftp 
:(
    Опции темы
nIkTo
Дата 30.11.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите, как максимально быстро получить дерево каталогов ftp аккаунта ?
Сейчас реализовано с помощью рекурсии и Net::FTP, работает медленно =(

Код

use Net::FTP;
use File::Listing qw(parse_dir);

......
tree($ftp, $ftp_info->{homedir}, $ftp_info);

sub tree {
   my $ftp = shift;
   my $root = shift;
   my $ftp_info = shift;
   
   unless ($root=~tr|/|/| - $ftp_info->{homedir}=~tr|/|/| == $ftp_info->{depth}) {
      
      my (@listing);
      
      eval{
         local $SIG{ALRM} = sub { die "Timed out\n" };
         alarm(30);
         @listing = $ftp->dir($root);
         alarm(0);
      };
      
      for (parse_dir(\@listing)) {
         my ($name, $type, $size, $mtime, $mode) = @$_;
         
         # Формируем полный путь
         my $path = $root."/".$name;
         $path = $root.$name if ($root eq '/');
         
         if ($type eq "d") {
            push(@{$ftp_info->{directories}}, $path);
            tree($ftp, $path, $ftp_info);
         }
      }
   }
}

PM   Вверх
arto
Дата 30.11.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ls -lR ?
PM MAIL ICQ   Вверх
nIkTo
Дата 30.11.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



arto, а как эту команду передать на выполнение фтп серверу ?
PM   Вверх
nIkTo
Дата 1.12.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



попробовал так :

Код

my @listing = $ftp->ls('-lR');


возвращает пустой массив.
Вероятно фтп сервер не поддерживает выполнение такой команды.
PM   Вверх
arto
Дата 1.12.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



quot
PM MAIL ICQ   Вверх
nIkTo
Дата 2.12.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



arto, из описания метода quot :

Цитата

WARNING This call should only be used on commands that do not require data connections. Misuse of this method can hang the connection.


Код

my $code = $ftp->quot('ls -lR');


первая цифра кода ответа : 5, тоесть команда не выполнилась.
PM   Вверх
ad280379
Дата 2.12.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nIkTo @ 30.11.2009,  21:24)
Подскажите, как максимально быстро получить дерево каталогов ftp аккаунта ?
Сейчас реализовано с помощью рекурсии и Net::FTP, работает медленно =(

Код

use Net::FTP;


хм...
что-то я не совсем понял суть вопроса. 
в методах четко есть следующее : 

Цитата

METHODS

ls ( [ DIR ] )

    Get a directory listing of DIR, or the current directory.

    In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list.
dir ( [ DIR ] )

    Get a directory listing of DIR, or the current directory in long format.

    In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list.


PM MAIL   Вверх
nIkTo
Дата 2.12.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ad280379, помоему вопрос предельно понятно задан.

Задача :
Поучить дерево каталогов на фтп аккаунте, затратив минимально времени.

Одно из решений :
Рекурсивный вызов функции которая производит листинг указанной директории, тем самым формируется дерево катологов.
Минусы данного решения :
медленная работа

Решение каторое предложил arto:
Получить дерево каталогов одним запросом с помощью команды ls -lR, похоже такая команды не поддерживается фтп сервером.
PM   Вверх
ad280379
Дата 2.12.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nIkTo @ 2.12.2009,  20:30)
ad280379, помоему вопрос предельно понятно задан.

Задача :
Поучить дерево каталогов на фтп аккаунте, затратив минимально времени.

спасибо за разъяснения.
вот только все в этой жизни относительно - у меня такое работает на ура.
с другой стороны подобного рода информация уже есть в корне ftp в виде файла который просто нужно отпарсить.



PM MAIL   Вверх
nIkTo
Дата 2.12.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ad280379 @ 2.12.2009,  20:35)
вот только все в этой жизни относительно - у меня такое работает на ура.
с другой стороны подобного рода информация уже есть в корне ftp в виде файла который просто нужно отпарсить.

ad280379, есть два вопроса к вам :
  • Какое "такое" у вас работает на ура ?
  • Что за файл такой волшебный в корне фтп лежит ?

PM   Вверх
ad280379
Дата 2.12.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nIkTo @ 2.12.2009,  21:36)
Цитата(ad280379 @ 2.12.2009,  20:35)
вот только все в этой жизни относительно - у меня такое работает на ура.
с другой стороны подобного рода информация уже есть в корне ftp в виде файла который просто нужно отпарсить.

ad280379, есть два вопроса к вам :

  • Какое "такое" у вас работает на ура ?
  • Что за файл такой волшебный в корне фтп лежит ?

1) встроенные методы моделя NET::Ftp - ls и dir
2) например ftp://ftp.debian.org/debian/ls-lR.gz
если сервер ваш то генерить сей файл очень просто на стороне сервера.
вообщето это есть правило хорошего тона держать данный файл на ftp сервере


 
PM MAIL   Вверх
nIkTo
Дата 2.12.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ad280379, теперь мне всё понятно  smile , так вот.
  • У меня все встроенные методы "моделя" Net::FTP работают на ура, не только ls и dir
  • Генерировать файл на сервере не выход smile  , вообще не понимаю как вам такая идея пришла в голову.

З.Ы. ad280379, учите русский.

Это сообщение отредактировал(а) nIkTo - 2.12.2009, 21:56
PM   Вверх
ad280379
Дата 2.12.2009, 21:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(nIkTo @ 2.12.2009,  21:55)

З.Ы. ad280379, учите русский.

учите Perl 
PM MAIL   Вверх
nIkTo
Дата 2.12.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ad280379,  оффтоп с вашей стороны.

И ещё добавлю к выше сказанному, может господин ad280379 не в курсе : для фтп аккауна каторый вы привели в качестве примера выше (ftp://ftp.debian.org/debian/ls-lR.gz) директория debian не является корнем. У меня всё.
PM   Вверх
arto
Дата 2.12.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


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

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


 




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


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

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