perl – 如何在目录中找到最新创建的文件?
发布时间:2020-12-15 21:18:41 所属栏目:大数据 来源:网络整理
导读:在Perl中有一个优雅的方式来找到目录中的最新文件(最新的修改日期)? 到目前为止,我正在搜索我需要的文件,并为每个文件修改时间,推入一个包含文件名的数组,修改时间,然后排序。 必须有一个更好的方法。 解决方法 你的方式是“正确”的方式,如果你需要
在Perl中有一个优雅的方式来找到目录中的最新文件(最新的修改日期)?
到目前为止,我正在搜索我需要的文件,并为每个文件修改时间,推入一个包含文件名的数组,修改时间,然后排序。 必须有一个更好的方法。 解决方法
你的方式是“正确”的方式,如果你需要排序列表(而不只是第一个,看到布赖恩的答案)。如果您不喜欢自己编写该代码,请使用
this
use File::DirList; my @list = File::DirList::list('.','M'); 我个人不会用ls -t方法 – 这涉及到划分另一个程序,它不可移植。几乎我所说的“优雅”! 关于rjray的解决办法,我稍稍改变一下: opendir(my $DH,$DIR) or die "Error opening $DIR: $!"; my @files = map { [ stat "$DIR/$_",$_ ] } grep(! /^..?$/,readdir($DH)); closedir($DH); sub rev_by_date { $b->[9] <=> $a->[9] } my @sorted_files = sort rev_by_date @files; 此后,@sorted_files包含排序列表,其中第0个元素是最新文件,每个元素本身包含对stat结果的引用,文件名本身在最后一个元素中: my @newest = @{$sorted_files[0]}; my $name = pop(@newest); 这样做的优点是,如果需要,稍后更改排序方法更容易。 编辑:这是一个更容易阅读(但更长)的目录扫描版本,这也确保只有普通的文件被添加到列表中: my @files; opendir(my $DH,$DIR) or die "Error opening $DIR: $!"; while (defined (my $file = readdir($DH))) { my $path = $DIR . '/' . $file; next unless (-f $path); # ignore non-files - automatically does . and .. push(@files,[ stat(_),$path ]); # re-uses the stat results from '-f' } closedir($DH); 注意:对readdir()的结果的定义()的测试是因为一个名为’0’的文件会导致循环失败,如果你只测试if(my $ file = readdir($ DH)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |