1

下面的程序正在从 SFTP 服务器下载文件,但我想在localdirectoryfromsftpdirectory的文件列表中创建一个 .listing 文件。如何使用 Net::SFTP::Foreign 创建它?

#!/usr/bin/perl

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

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

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

$sftp->disconnect;
4

1 回答 1

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;
于 2013-09-17T07:39:42.827 回答