我遇到一个问题,我尝试先下载最旧的文件,但目录列表没有正确返回。下面的示例是我认为应该如何完成,但我无法让它工作。我正在使用网络::SFTP::外部模块。
$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";
}
经过Net::SFTP::Foreign
,我相信,你犯了两个错误:
首先,您仅检索带有 names_only => 1
的文件名。所以你不会得到mtime
.
其次,我不确定您将$@ls
数组取消引用为标量做什么。这是syntax error
.
您需要做的就是执行简单的$sftp -> ls(...)
并从结果中的Net::SFTP::Foreign::Attributes
对象获取mtime
并sort
它。
以下两行将适合您:
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;