1

localdirectory以下のプログラムは SFTP サーバーからファイルをダウンロードしていますが、 fromsftpdirectoryのファイル リストに .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 に答える