2013-09-17 5 views
1

Нижеприведенная программа загружает файлы с SFTP-сервера, но я хочу создать файл .listing в файле localdirectory из списка файлов sftpdirectory. Как создать это с помощью Net :: SFTP :: Foreign?Создайте файл .listing используя Net :: SFTP :: Foreign

#!/usr/bin/perl 

use strict; 
use warnings; 
use Net::SFTP::Foreign; 

my $sftp = Net::SFTP::Foreign->new(
    '[email protected]', 
    password => 'password', 
    more  => ['-v'] 
); 

$sftp->get('sftpdirectory/data.zip', 'localdirectory') 
    or die "unable to retrieve copy: ".$sftp->error; 

$sftp->disconnect; 

ответ

1

Простое решение, которое извлекает все удаленные записи в массив и их отвалов его:

# untested! 
my $ls = $sftp->ls('sftpdirectory') 
    or die "ls failed: " . $sftp->error; 
open my $fh, '>', 'localdirectory/listing' or die "unable to create file: $!"; 
print $fh $_->{longname}, "\n" for @$ls; 
close $fh; 

памяти эффективное решение, которое записывает удаленные записи в .listing файл, как они извлекаются из удаленного хоста :

open my $fh, '>', 'localdirectory/.listing' or die "unable to create file: $!"; 

my $wanted = sub { 
    print $fh $_[1]{longname}, "\n"; 
    0; 
} 

unless ($sftp->ls('sftpdirectory', wanted => $wanted)) { 
    close $fh; 
    unlink 'localdirectory/.listing'; 
    die "ls failed: ". $sftp->error; 
} 
close $fh; 
Смежные вопросы