App-Bin4TSV
view release on metacpan or search on metacpan
scripts/fileday view on Meta::CPAN
#!/usr/bin/perl
use 5.014 ; use strict ; use warnings ;
use feature qw [ say ] ;
use Time::HiRes qw[gettimeofday tv_interval] ;
use Term::ANSIColor qw [ :constants color ] ; $Term::ANSIColor::AUTORESET = 1 ;
use File::Spec::Functions qw[ catfile splitdir rel2abs updir ] ;
use Getopt::Std ;
use List::Util qw [ max min sum sum0 reduce uniq ] ;
use Cwd qw [ getcwd abs_path ] ;
use POSIX qw[ strftime ] ;
my $time_start = [ gettimeofday ] ;
getopts '~.:b:dHMmrSv:x:y' , \my%o ;
push @ARGV , $o{x} if defined $o{x} ; # 弿°ããªãã·ã§ã³ã§ ä¸ããããå ´åã®å¦ç
my $start_dir = $ARGV [0] // "." ; # å
é ã®ãã£ã¬ã¯ããª
my $I = catfile q[] , q[] ;
my $d0 = ( getcwd ) . $I ;
chdir $start_dir or do { say STDERR "Seems no such a directory ``$start_dir''" ; exit -1 } ;
$d0 = (getcwd ). $I unless exists $o{g} && $o{g} =~ m/a/ ;
$d0 = '' if exists $o{g} && $o{g} =~ m/A/ ;
& main ;
exit 0 ;
END{ print RESET "" } ;
sub main () {
our $fmt = $o{y} ? "%Y" : $o{m} ? "%Y-%m" : $o{d} ? "%Y-%m-%d" : $o{H} ? "%Y-%m-%dT%H"
: $o{M} ? "%Y-%m-%dT%H:%M" : $o{S} ? "%Y-%m-%dT%H:%M:%S" : "%Y-%m-%d" ;
& node_proc ( 0 ) ;
& output () ;
sub open_dir_error_message ( $ ) {
say STDERR FAINT BOLD YELLOW "Cannot open the directory `$_[0]' so skipped." ;
}
sub node_proc ( $ ) {
# 第ï¼å¼æ°ã¯ãå
ã®æå®ãã£ã¬ã¯ããªããã®æ·±ãã§ããã
# è¿ãå¤ã¯ãããã§çµé¨ããæå¤§ã®æ·±ãã§ããã
my $dep = $_[0] ; # æ·±ã
my $mdep = $dep ; # æå¤§æ·±ãã®è¨é²ç¨ã
our ( %nA , %nM, %nC ) ; #ãã¡ã¤ã«ã®åæ°ãæéã®ãã³æ¯ã«è¨é²ãã
our ( %bA , %bM, %bC ) ; #ãã¡ã¤ã«ã®ãã¤ãæ°ã®åè¨ãæéã®ãã³æ¯ã«è¨é²ãã
opendir my $dh , '.' or do { open_dir_error_message ( abs_path "." ) ; return () } ;
my @nondir ; # plain files ;
my @dirs0 = readdir $dh ;
@dirs0 = grep { ! /\A\./ } @dirs0 if exists $o{'.'} && $o{'.'} eq "0" ; # é ããã¡ã¤ã«ã«é¢ããå¦ç
@dirs0 = grep { ! /\A\.{1,2}\Z/ && ( -d $_ || do{ push @nondir , $_ ; 0 } ) } @dirs0 ;
my @dirs = grep { ! -l $_ } @dirs0 ;
for ( @nondir ) {
my @ti = ( stat ) [ 7 .. 10] ;
my $byte = shift @ti ;
@ti = map { strftime $fmt , localtime $_ } @ti ;
$nA { $ti[0] } ++ ;
$nM { $ti[1] } ++ ;
$nC { $ti[2] } ++ ;
$bA { $ti[0] } += $byte ;
$bM { $ti[1] } += $byte ;
$bC { $ti[2] } += $byte ;
}
## print CYAN "@nondir" ;
return unless $o{r} ; # å帰çã«ä¸ã«è¾¿ããå¦ãã
for ( @dirs ) {
next unless chdir $_ ;
$mdep = max $mdep , & node_proc ( $dep + 1 ) ; # <-- å帰çãªå¼ã³åºã
chdir $dh or die ; # ããã§æ»ããªãã®ã¯é大
}
closedir $dh ;
return $mdep ;
sub output () {
my @t0 = ( "when" , "#accessed" , "#modified" , "#created" ) ;
push @t0 , "byteSum_A" , "byteSum_M" , "byteSum_C" unless exists $o{b} && $o{b} eq "0" ;
say join "\t" , @t0 ;
my @k = uniq sort keys %nA , keys %nM, keys %nC ;
@k = reverse @k if $o{'~'} ;
for ( @k ) {
my @t = ( $_ , $nA{$_} , $nM{$_} , $nC{$_} ) ;
push @t , $bA{$_} , $bM{$_} , $bC{$_} unless exists $o{b} && $o{b} eq "0" ;
say join "\t" , map {$_ //'' } @t ;
}
}
}
END{
exit if exists $o{v} && $o{v} eq "0" ;
say STDERR " -- " , REVERSE ITALIC " Process time: " , CLEAR " " ,
sprintf( "%.6f", tv_interval $time_start , [ gettimeofday ] ) , " second(s)." ;
}
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
$o{v} = 0 ;
exit 0 ;
}
=encoding utf8
=head1
ã$0 [dirname]
ãªãã·ã§ã³:
-y : å¹´åä½ã§éè¨
-m : æåä½ã§éè¨
-d : æ¥åä½ã§éè¨ (åæè¨å®)
-H : æåä½ã§éè¨
-M : ååä½ã§éè¨
-S : ç§åä½ã§éè¨
-. 0 : é ããã¡ã¤ã«ãå¦ç対象ã¨ããªããã¨ã®æå®
-b 0 : ãã¤ãæ°ã®åè¨ã®åºåã®æå¶ã®æå®
-r : ãã£ã¬ã¯ããªãå帰çã«ä¸ã«è¾¿ãã
-~ : åºåã®æéé ãéã«ããã
-v 0 : å¦çã«è¦ããç§æ°ã®æ
å ±ã®æå¶ã®æå®
( run in 0.495 second using v1.01-cache-2.11-cpan-5511b514fd6 )