如何使用时间戳在 Perl 中获取最近的文件

编程学习者

我有一个文件夹,里面装满了文件日志。日志每周生成一次。例如。

/path/week20a.log
/path/week20b.log
/path/week29d.log
/path/week30c.log
/path/week31a.log
/path/week32a.log

我想获取上周的最新日志(上周是指这周之前上周的最新日志文件)和前一周的最新日志。在这种情况下,

/path/week21d.log
/path/week20c.log

我有两个子程序函数,看起来像:

sub getweek {
$week = ???; #where week should return one of the 'week***' listed above
my @files = File::Find::Rule->file()
                            ->name('*$week.log')
                            ->in(mydir);

my @files_with_mtimes = map +{ name => $_, mtime => (stat $_)[9] }, @files;
our @sorted_files = reverse sort { $a->{mtime} <=> $b->{mtime} } @files_with_mtimes;

return $sorted_files[0]{name};
}



问题是我正在使用当前周Time::Piece->new->strftime("%V"),然后我这样做是-2为了获得前一周。我正在硬编码,假设 2 周前的最新日志将始终存在并且将是前一个。如果上周没有跑步怎么办?在这种情况下,最后一个日志将是前一周,前一周将是前一周。

我怎么能有两个子程序,其中一个获取上周的日志,Time::Piece->new->strftime("%V")-1如果它存在,如果不存在,则递减以查找在那之前的一周,然后基于它执行类似的操作以找到在那之前的最后一个日志。

池上
use File::Basename qw( basename );

my @qfns = ...;
my $target_week = ...;

my %qfns_by_week;
for my $qfn (@qfns) {
   my $fn = basename($qfn);
   my ($week) = $fn =~ /(\d+)/
      or warn("Skipping $qfn: Unrecognized format\n"), next;

   next if $week > $target_week;

   push @{ $qfns_by_week{$week} }, $qfn;
}

my ($week2, $week1) = sort { $b <=> $a } keys(%qfns_by_week);

my @latest_qfns;
push @latest_qfns, ( reverse sort @{ $qfns_by_week{$week1} } )[0] if defined($week1);
push @latest_qfns, ( reverse sort @{ $qfns_by_week{$week2} } )[0] if defined($week2);

请注意,最后两行假设路径和文件名的前导部分对于同一周的所有日志都相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用时间戳列获取过去X天的数据?

来自分类Dev

如何在UTC中使用时间戳“触摸”文件?

来自分类Dev

如何使用时间戳作为MongoDB和Node.js中的字段按天对记录进行分组

来自分类Dev

如何获取Chrome以html格式使用时间值?

来自分类Dev

如何获取Chrome以html格式使用时间值?

来自分类Dev

使用时间戳bash删除一个小时以上的文件中的行

来自分类Dev

如何使用时间范围grep文件

来自分类Dev

使用awk的bash脚本使用时间戳重命名文件

来自分类Dev

CoreData:按创建顺序对结果进行获取和排序,而无需使用时间戳

来自分类Dev

vim-使用时间戳同时浏览多个文件

来自分类Dev

转到网络服务器-不要使用时间戳缓存文件

来自分类Dev

vim-使用时间戳同时浏览多个文件

来自分类Dev

Linux查找命令-显示超过7天的文件-不使用时间戳

来自分类Dev

Python服务-使用时间戳写入文件名

来自分类Dev

使用时间戳多次将sp_who的结果插入表中

来自分类Dev

RedShift-使用时间戳列中的日期更新表

来自分类Dev

使用时间戳为 R 中的 Foverlaps 检索 Y (RIGHT JOIN) 的不匹配项

来自分类Dev

如何使用时间戳作为参考合并 SQL Server 2014 中同一个表中的记录

来自分类Dev

如何在库中获取SAS表的大小和上次使用时间

来自分类Dev

使用正则表达式使用时间戳 Bash 多个副本最新文件

来自分类Dev

如何使用perl获取最近创建的目录?

来自分类Dev

一组列作为 Mysql 中的唯一键,但使用时间戳作为一天

来自分类Dev

使用时间选择器Android获取时间

来自分类Dev

如何使用使用时间过长的巨大匹配关键字文件?

来自分类Dev

如何使用时间将所有文件从子文件写入父文件?

来自分类Dev

如何使用时间轴获取更多数据

来自分类Dev

如何获取使用时间插入的倒数第二行?

来自分类Dev

如何使用时间序列图在r中绘制垂直虚线

来自分类Dev

如何在for循环上使用时间模块以防止列表处理中的延迟

Related 相关文章

  1. 1

    如何使用时间戳列获取过去X天的数据?

  2. 2

    如何在UTC中使用时间戳“触摸”文件?

  3. 3

    如何使用时间戳作为MongoDB和Node.js中的字段按天对记录进行分组

  4. 4

    如何获取Chrome以html格式使用时间值?

  5. 5

    如何获取Chrome以html格式使用时间值?

  6. 6

    使用时间戳bash删除一个小时以上的文件中的行

  7. 7

    如何使用时间范围grep文件

  8. 8

    使用awk的bash脚本使用时间戳重命名文件

  9. 9

    CoreData:按创建顺序对结果进行获取和排序,而无需使用时间戳

  10. 10

    vim-使用时间戳同时浏览多个文件

  11. 11

    转到网络服务器-不要使用时间戳缓存文件

  12. 12

    vim-使用时间戳同时浏览多个文件

  13. 13

    Linux查找命令-显示超过7天的文件-不使用时间戳

  14. 14

    Python服务-使用时间戳写入文件名

  15. 15

    使用时间戳多次将sp_who的结果插入表中

  16. 16

    RedShift-使用时间戳列中的日期更新表

  17. 17

    使用时间戳为 R 中的 Foverlaps 检索 Y (RIGHT JOIN) 的不匹配项

  18. 18

    如何使用时间戳作为参考合并 SQL Server 2014 中同一个表中的记录

  19. 19

    如何在库中获取SAS表的大小和上次使用时间

  20. 20

    使用正则表达式使用时间戳 Bash 多个副本最新文件

  21. 21

    如何使用perl获取最近创建的目录?

  22. 22

    一组列作为 Mysql 中的唯一键,但使用时间戳作为一天

  23. 23

    使用时间选择器Android获取时间

  24. 24

    如何使用使用时间过长的巨大匹配关键字文件?

  25. 25

    如何使用时间将所有文件从子文件写入父文件?

  26. 26

    如何使用时间轴获取更多数据

  27. 27

    如何获取使用时间插入的倒数第二行?

  28. 28

    如何使用时间序列图在r中绘制垂直虚线

  29. 29

    如何在for循环上使用时间模块以防止列表处理中的延迟

热门标签

归档