[Perl] FTP + рекурсия. Узнать суммарный размер

Модератор: Модераторы разделов

Кто-то
Сообщения: 100

[Perl] FTP + рекурсия. Узнать суммарный размер

Сообщение Кто-то »

Нужно узнать сколько в сумме занимают файлы на ftp, начиная с текущей директории.
Знаю, что юзать нужно Net::FTP::Recursive, но что-то мозг плохо работает в этом направлении.
Laptop, Work and Home Desktop - Ubuntu
Work servers and Home router - OpenBSD
Zaurus - Cacko 1.23Full
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [Perl] FTP + рекурсия. Узнать суммарный размер

Сообщение diesel »

Кто-то писал(а): ↑
11.10.2006 21:17
Нужно узнать сколько в сумме занимают файлы на ftp, начиная с текущей директории.
Знаю, что юзать нужно Net::FTP::Recursive, но что-то мозг плохо работает в этом направлении.


Без гарантий, что правильно(скрипт вообще для другого использовался):

Код: Выделить всё

#!/usr/bin/perl -w
use Net::FTP;

my $hostname = '';
my $login = "";
my $passwd = "";
$ftp=ftp_login($hostname,$login,$passwd);
$size=0;

$s=ftp_get_tree(".");
#print \%{$s{'public_html'}};
print $size,"\n";

#ftp_login($hostname,$login,$password);
sub ftp_login {
    my ($hostname,$login,$password) = @_;
    my $ftp = Net::FTP->new(Host=>$hostname) or die "Cannot connect to the server $hostname: $@";
    $ftp ->login($login,$password) or die "Cannot login to server $hostname, with $login, $password: $@ ";
    print "FTP $login login to $hostname whith $password OK \n";
    return $ftp;
}

sub ftp_get_tree {
    my $path = shift;
    my %tree_hash;
    my @dir_content;
    @dir_content = grep {!/\.{1,2}$/} $ftp->dir($path);
    foreach $in (@dir_content){
        @s = split " ",$in;
        #print "$s[4] $path/$s[8]\n";
        if ($s[0] =~ "^d.*"){
            $tree_hash{$s[8]} = ftp_get_tree("$path/$s[8]");
        #   $size+=$s[4];

        }else{
            $tree_hash{$s[8]} = -1;
            $size+=$s[4];
        }
    }
    return \%tree_hash;
}
Спасибо сказали: