Perl SFTP首先下载最旧的文件

时间:2016-02-13 13:42:31

标签: perl

我遇到的问题是我首先尝试下载最旧的文件,但目录列表没有正确返回。下面的例子是我认为它应该如何完成但我不能让它工作。我正在使用Net :: SFTP :: Foreign模块。

$source_sftp->setcwd($path) or die "unable to change cwd: " . $source_sftp->error;

my @ls = @{ $source_sftp->ls ('.', names_only => 1,
                                no_wanted => qr/^\./,
                                )};

my @sorted = sort { $a->{a}{mtime} <=> $b->{a}{mtime} } $@ls;

for (@sorted) {

print "$_\n";
}

1 个答案:

答案 0 :(得分:2)

经过Net::SFTP::Foreign之后,我相信,你犯了两个错误:

首先,您只检索names_only => 1文件的名称。所以你不会得到mtime

其次,我不确定你使用$@ls将数组解引用到标量中。它是syntax error

您需要做的就是执行简单的$sftp -> ls(...)并从结果中的mtime对象获取Net::SFTP::Foreign::Attributessort

以下两行适用于您:

my @ls =  @{ $sftp -> ls('.', no_wanted => qr/^\./)   
               or die "unable to retrieve directory: ".$sftp -> error };

my @sorted = map{$_ -> {filename}}
             sort{ $a -> {a}{mtime} <=> $b -> {a}{mtime} } 
             @ls;