Нажмите k
для отключения и ввода PID и сигнала для отключения.
Сортировка глобуса по отметке времени модификации каждого файла с помощью функции stat
.
напр.
вместо:
for my $file ( glob($files) ) {
использовать:
for my $file ( sort { (stat $b)[9] <=> (stat $a)[9] } glob($files) ) {
Это приведет к сортировке в обратном порядке временных меток, т. е. первый элемент будет самым новым.
Вероятно, вы не хотите перебирать весь список файлов, соответствующих глобусу, просто используйте самый последний:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $glob_pattern = './Project/chris/company/Delta/force/*/total/data.list';
my @files = ( sort { (stat $b)[9] <=> (stat $a)[9] } glob($glob_pattern) );
my $file = $files[0];
printf "%s: %i\n", $file, count_lines($file);
sub count_lines {
...
...
...
}
Почему (stat $b)[9]
и (stat $a)[9]
? Потому что время модификации — это элемент номер 9 из списка из 13 элементов, возвращаемого функцией stat
. Он обычно используется как:
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
atime
, mtime
, или ctime
— все числовые значения, секунды с начала эпохи (Полночь, 1 января 1970 г. по Гринвичу)-т.е. стандартное время Unix _значения t. Поскольку они числовые, их можно сортировать, сравнивать, добавлять, вычитать и т. д., как и любое другое числовое значение.
См. perldoc -f stat
для получения более подробной информации о функции статистики.
Подробную информацию о функции sort
см. также в perldoc -f sort
. В приведенном выше коде он использует блок кода для сортировки по значению, полученному из имени файла (, то есть их mtimes ), а не по самим именам файлов.
Кстати, помните, что массивы perl начинаются с 0, а не с 1. Таким образом, [9] — это десятый элемент, начиная с нуля. Кроме того, [6] является седьмым элементом, поэтому ваш (split('/',$_))[6]
, вероятно, должен был быть [5]
вместо [6]
. Сейчас в этом нет необходимости, так как приведенный выше код использует фактические временные метки файлов.
Сzsh
:
wc -l <./Project/chris/company/Delta/force/run_<->_df/total/data.list([-1])
Дает количество строк¹ в data.list
с наибольшим числом run_..._df
. Пока
wc -l <./Project/chris/company/Delta/force/run_<->_df/total/data.list(-om[1])
Дает количество строк в последнем измененном data.list
.
Или к O
rder n
числово по первой последовательности цифр, найденных в путях:
wc -l <./Project/chris/company/Delta/force/*/total/data.list(nOe['
REPLY=${(MS)REPLY##<->}'][1])
¹ технически, из символов новой строки , что может дать вам число, отличное от подхода perl, если последняя «строка» не разделена.