在目录中查找最新文件

时间:2014-07-25 13:43:31

标签: perl

我正在尝试构建一个代码来查找目录中的最新文件。我已经搜索了一些解决方案,但我仍然无法使代码工作。我想找到最新的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];
        }
    }
}

3 个答案:

答案 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"
        }
    ]
}