加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读