#!/usr/bin/perl -T
getopts
'~.:0:1dhlmpqsx'
, \
my
%o
;
do
{
select
STDERR ; HELP_MESSAGE () }
if
!
@ARGV
&& !
$o
{x} ;
$o
{0} //=
''
;
my
$dig
= (
$o
{
'.'
} // 2) ;
$dig
= $&
if
(
$dig
=~ /\d+/);
my
$fmt
=
"%0.${dig}f"
;
my
$info
=
$o
{l} ?
sub
{
lstat
$_
[0] } :
sub
($) {
stat
$_
[0] } ;
my
$t0
= timelocal (
localtime
) ;
my
$div
=
$o
{d} ? 86400 :
$o
{h} ? 3600 :
$o
{m} ? 60 :
undef
;
my
$u
=
$o
{d} ?
'(d)'
:
$o
{h} ?
'(h)'
:
$o
{m} ?
'(m)'
:
'(s)'
;
my
$tz
=
do
{
my
$now
=
time
();
my
$off
= (timegm(
localtime
(
$now
))-timegm(
gmtime
(
$now
)))/ 60;
sprintf
(
"%+03d:%02d"
,
$off
/60,
$off
%60 );}
if
$o
{0} ;
print
STDERR BRIGHT_RED
"Warning: '-0 "
, ON_BLUE
$o
{0} , RESET BRIGHT_RED
"' is specified but "
,
ON_BLUE
$o
{0}, RESET BRIGHT_RED
" seems like a file.\n"
if
defined
$o
{0} && -e
$o
{0} ;
print
STDERR BRIGHT_RED
"Warning: '-. "
, ON_BLUE
$o
{'.
'} , RESET BRIGHT_RED "'
is specified but ",
ON_BLUE
$o
{
'.'
}, RESET BRIGHT_RED
" seems like a file.\n"
if
defined
$o
{
'.'
} && -e
$o
{
'.'
} ;
& main ;
exit
;
sub
main {
if
( !
$o
{1} ) {
my
@out
=
qw[atime mtime ctime]
;
grep
{
$_
.=
$u
}
@out
;
push
@out
,
qw[per.]
if
$o
{p} ;
push
@out
,
qw[size(B)]
if
$o
{s} ;
splice
@out
, (
$o
{
'~'
} ? 0 :
@out
) , 0,
qw[filename]
;
print
join
(
"\t"
,
@out
),
"\n"
;
}
if
(
$o
{x} )
{
& eachFile
for
<> ;
}
else
{
& eachFile
for
@ARGV
;
}
}
sub
eachFile {
chomp
;
do
{
print
STDERR CYAN
"'$_' : Not exists.\n"
;
next
}
unless
-e ;
my
@w
=(8,9,10) ;
my
@infos
=
$info
->(
$_
) ;
my
@out
=
my
@out0
=
@infos
[
@w
] ;
@out
=
@out0
=
map
{
$t0
-
$_
}
@out
;
@out
=
map
{
sprintf
$fmt
,
$_
/
$div
}
@out0
if
defined
$div
;
@out
=
map
{
&dt
(
$_
)} @{[
$info
->(
$_
) ]}[ 8,9,10 ]
if
$o
{0} =~ /[td]/i ;
push
@out
,
sprintf
'%04o'
,
$infos
[2] & 0777
if
$o
{p} ;
push
@out
,
$infos
[7]
if
$o
{s} ;
$_
.=
'/'
if
-d ;
splice
@out
, (
$o
{
'~'
} ? 0 :
@out
) , 0 ,
$_
;
grep
{
$_
=
qq['$_']
}
@out
if
$o
{
q} ;
print join ("\t" , @out) , "\n" ;
}
sub
dt ( $ ){
my
@T
=
$o
{0} =~ m/u/i ?
gmtime
$_
[0] :
localtime
$_
[0] ;
my
@ret
;
if
(
$o
{0} =~ /[dT]/ ) {
push
@ret
,
sprintf
'%02d-%02d-%02d'
,
$T
[5] % 100 ,
$T
[4]+1,
$T
[3]
if
$o
{0} !~ /[4T]/ ;
push
@ret
,
sprintf
'%04d-%02d-%02d'
,
$T
[5] + 1900,
$T
[4]+1,
$T
[3]
if
$o
{0} =~ /[4T]/ ;
}
push
@ret
,
sprintf
@{ [
qw{Sun Mon Tue Wed Thu Fri Sat}
] }[
$T
[6] ]
if
$o
{0} =~ /^[^cj]
*y
[^cj]*$/i ;
push
@ret
,
sprintf
@{ [
qw{日 月 火 水 木 金 土}
] }[
$T
[6] ]
if
$o
{0} =~ /y.
*j
|j.
*y
/i ;
push
@ret
,
sprintf
@{ [
qw{日 一 二 三 四 五 六}
] }[
$T
[6] ]
if
$o
{0} =~ /y.
*c
|c.
*y
/i ;
push
@ret
,
sprintf
'%02d:%02d:%02d'
,
@T
[2,1,0]
if
$o
{0} =~/[tT]/ ;
my
$retstr
=
join
' '
,
@ret
;
$retstr
=
"$ret[0]T$ret[1]$tz"
if
$o
{0} =~ m/T/ ;
$retstr
=
qq["$retstr"]
if
$o
{0} =~ m/
q/ ;
return $retstr ;
}
## ヘルプの扱い
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
;
exit
0 ;
}