我遇到的问题是我首先尝试下载最旧的文件,但目录列表没有正确返回。下面的例子是我认为它应该如何完成但我不能让它工作。我正在使用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";
}
答案 0 :(得分:2)
经过Net::SFTP::Foreign
之后,我相信,你犯了两个错误:
首先,您只检索names_only => 1
文件的名称。所以你不会得到mtime
。
其次,我不确定你使用$@ls
将数组解引用到标量中。它是syntax error
。
您需要做的就是执行简单的$sftp -> ls(...)
并从结果中的mtime
对象获取Net::SFTP::Foreign::Attributes
并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;