#!/usr/bin/perl
use
Time::HiRes
qw[ stat tv_interval time gettimeofday ]
;
$o
{d} //= 1 ;
$o
{g} //= 12 ;
my
$start_time
= [ gettimeofday ] ;
main () ;
exit
0 ;
sub
main {
my
@sdir
=
defined
$o
{x} ? (
$o
{x}) :
@ARGV
?
@ARGV
:
qw[ . ]
;
our
@ Files = () ;
find ( {
wanted
=> \& wanted ,
no_chdir
=> 1 } ,
@sdir
) ;
sub
wanted {
my
@s
=
stat
$_
;
my
$atime
=
$s
[8] ;
my
$bytes
=
$s
[7] ;
push
@ Files , ff->new (
$_
,
$atime
,
$bytes
)
if
! ( -d _ &&
do
{
$_
.=
'/'
;1} ) ||
$o
{d} ;
}
my
$now
=
time
;
$_
->{ elapsed } =
$now
-
$_
->{atime}
for
@Files
;
@ Files =
sort
{
$a
->{elapsed} <=>
$b
->{elapsed} }
@Files
;
say
join
"\t"
,
"Diff_seconds"
,
"Seconds_before"
,
"Byte_size"
,
"File_name"
;
my
$mrec0
= 0 ;
my
$shown
= 0 ;
for
(
splice
@Files
, 0 ,
$o
{g} ) {
my
@t
;
my
$mrec
=
$_
->{elapsed} ;
push
@t
,
sprintf
"%0.6f"
,
$mrec
-
$mrec0
;
push
@t
,
sprintf
"%0.6f"
,
$mrec
;
push
@t
,
$_
->{bytes},
$_
->{name} ;
$t
[2] =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/g
if
$o
{
','
} //
''
ne
"0"
;
say
join
"\t"
,
@t
;
$shown
++ ;
$mrec0
=
$mrec
;
}
my
$num
= @ Files ;
my
$elps
=
sprintf
"%.6f"
, tv_interval
$start_time
;
say
STDERR CYAN
"Files processed : $num ; Shown above : $shown ; Elapsed seconds : $elps"
;
}
sub
HELP_MESSAGE {
local
@ARGV
=
do
{
my
(
$x
,
@y
) = 0 ; 1
while
(
@y
=
caller
$x
++ )[ 0 ] eq
"Getopt::Std"
;
$y
[1] } ;
Pod::Perldoc -> run ;
}
sub
VERSION_MESSAGE { $ Getopt::Std::STANDARD_HELP_VERSION = 1 }
sub
new ( $ ) {
my
$ins
= {
name
=>
$_
[1] ,
atime
=>
$_
[2] ,
bytes
=>
$_
[3] } ;
return
bless
$ins
;
}