Как получить последний созданный каталог с помощью Perl? - PullRequest
0 голосов
/ 23 мая 2019

Эд: - у меня есть под каталогами

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

Мне нужно выбрать 2019-05-20_16-38-24 этот каталог как переменную, используя perl

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Вот альтернатива ответу @ choroba, если ваши каталоги не названы последовательно.Он использует File :: stat (который входит в стандартную комплектацию Perl) и преобразование Шварца для сортировки по дате создания каталогов:

#! /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
1 голос
/ 23 мая 2019

Для отметок времени в указанном формате работает обычное сравнение строк, поэтому вы можете использовать maxstr из List :: 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...