#!/usr/bin/perl
use warnings; use strict;
my($n,%n)=(0);
while(<>){
chomp;
next if !-f$_; #just count files, ignore dirs, symlinks etc
my $mtime=(stat($_))[9];
my @lt=localtime($mtime); $lt[5]+=1900; $lt[4]+=1;
my $date=sprintf"%04d-%02d-%02d", @lt[5,4,3];
$n{$date}++;
$n++;
}
my @d=sort keys %n;
printf "Date $_ has %3d files\n",$n{$_} for @d;
print "A total of $n files between $d[0] and $d[-1]\n";
Сохранить как num_files_by_date.pl
и chmod +x num_files_by_date.pl
. Программа берет список файлов на STDIN и подсчитывает количество на каждую дату. Запустите пример так:
\ls -1 | ./num_files_by_date.pl
\ls -d1 /root/perl/* | perl num_files_by_date.pl
find dir1/ dir2/ | ./num_files_by_date.pl
Вывод может быть:
Date 2019-04-28 has 2 files
Date 2019-04-30 has 3 files
Date 2019-05-03 has 1 files
Date 2019-05-06 has 4 files
A total of 10 files between 2019-04-28 and 2019-05-06