未排序的数据
5CM00225_10_16_2017_10_54_42.xml
5CM10538_10_16_2017_11_04_18.xml
1ZM06004_10_16_2017_11_04_14.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM05391_10_15_2017_08_51_07.xml
5ZM05388_10_17_2017_08_01_06.xml
5ZM00058_10_17_2017_08_00_49.xml
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
预期结果
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
5ZM05391_10_15_2017_08_51_07.xml
5CM00225_10_16_2017_10_54_42.xml
1ZM06004_10_16_2017_11_04_14.xml
5CM10538_10_16_2017_11_04_18.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM00058_10_17_2017_08_00_49.xml
5ZM05388_10_17_2017_08_01_06.xml
我使用Net::SFTP
获取远程站点上列出的目录,并与本地文件列表进行比较。我想按文件名中的日期对列表进行排序,但是由于字符串中还有其他信息需要忽略,因此我遇到了问题。
my $sftp = Net::SFTP->new( $host, %args);
my @list = $sftp->ls($path);
open(my $fh, '>', $file); # open a log file to save remote directory listing
my @sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, $_=~/(\d{2})_(\d{2})_(\d{4})_(\d{2})_(\d{2})_(\d{2})/] } # unsuccessful sorting attempt
@list;
foreach my $item (@sorted) {
$i = ${item}->{filename};
print $fh "$1\n"; # prints each record to the open log file
}
close $fh;
我之前已经进行过排序,并进行了大量的正则表达式,但是从来没有同时进行过,我很显然将它弄乱了,因为它没有进行任何排序,也没有引发任何错误。
我曾考虑过从每个字符串中提取DD_MM_YYYY_hh_mm_ss并尝试将其用作参考,但是我没有取得任何可用的进展,因此我放弃了这个想法。