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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

艾德: - 我有以下目录

  • 2019-05-20_16-38-21
  • 2019-05-20_16-38-22
  • 2019-05-20_16-38-23
  • 2019-05-20_16-38-24

我需要使用perl选择2019-05-20_16-38-24此目录作为变量

可能吗 ?

提问于
用户回答回答于

如果你的目录没有一致地命名,这里可以替代@ choroba的答案。它使用File :: stat(标配Perl)和Schwartzian变换来对目录的创建日期进行排序:

#! /usr/bin/perl

use strict;
use warnings;

use File::stat;

my $parent = '.';    # parent directory you're searching

# Schwartzian Transform to sort directories by their creation time
# see https://en.wikipedia.org/wiki/Schwartzian_transform
my @dirs =
  map { $_->[0] }                      # 3. extract the directory names from the sorted list
  sort { $a->[1] <=> $b->[1] }         # 2. sort the arrays on creation time
  map { [ $_ => stat( $_ )->ctime ] }  # 1. get the creation time for each directory
                                       #    and store it with the directory name in an array
  glob( "$parent/*/" );                # 0. get the directories in the parent dir

my $most_recent = $dirs[-1];           # the last one is the most recent
用户回答回答于

对于给定的格式时间戳,正常的字符串比较工作,所以你可以使用maxstr列表::的Util

#!/usr/bin/perl
use warnings;
use strict;

use List::Util qw{ maxstr };

my @dirs = qw(
    2019-05-20_16-38-21
    2019-05-20_16-38-22
    2019-05-20_16-38-23
    2019-05-20_16-38-24
);

my $most_recent = maxstr(@dirs);

扫码关注云+社区

领取腾讯云代金券