我正在尝试构建一个代码来查找目录中的最新文件。我已经搜索了一些解决方案,但我仍然无法使代码工作。我想找到最新的xml文件。
#!/usr/bin/perl
use warnings;
use strict;
my $dir_INFO = '/local/nelly/INFO';
my $dir_InfoNames = '/local/data/InfoNames';
#Open INFO
opendir( DIR, $dir_INFO ) or die "can't opendir INFO";
my @files = grep { !/\./ } readdir(DIR);
foreach my $file (@files) {
my $dir3 = "/local/nelly/INFO/$file/XML";
opendir( DIR, $dir3 ) or die "can't opendir XML";
my @files2 = grep { /.xml/ } readdir(DIR);
for my $files2 (@files2) {
open( FILES2, "<", "/local/nelly/INFO/$file/XML/$files2" ) or die "could not open $files2 \n";
while (<FILES2>) {
#sort by modification time
my %new = map( ( $_, "$dir3\\$_" ), my @xmls );
@xmls = sort { $new{$a} <=> $new{$b} } @xmls;
print "$xmls[0]";
my $locations = $xmls[0];
}
}
}
答案 0 :(得分:1)
只需使用File::stat
获取对象表示,即可按mtime
对文件列表进行排序。
注意,为了stat
一个文件,必须提供一个系统逻辑引用。换句话说,可能需要完整路径。因此,我经常使用文件glob
来获取列表,因为这将自动包含文件名中的路径信息。
use strict;
use warnings;
use File::stat;
my @files = sort {stat($a)->mtime <=> stat($b)->mtime} glob('*.pl');
print "Youngest = $files[0]\n";
print "Oldest = $files[-1]\n";
答案 1 :(得分:0)
您使用的是Linux吗?使用外部流程是否可以接受?如果是这样,那么你可以使用它:
# list files in folder with 'ls' command, use '-c' option to sort by creation time
open(F, "ls -ct1 |");
# process lines that get returned one by one
while(<F>) {
chomp();
print "$_\n";
}
close(F);
答案 2 :(得分:0)
{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}