This perl script prints modification time of a file, in various format.
Examples :
datemodif y-m-d mystuff.log → 2003-30-06
datemodif d/M/Y-h.m.s mystuff.log → 06/12/03-21.30.02
datemodif X d O Y mystuff.log → Samedi 06 Décembre 03
#!/usr/bin/perl
# datemodif <format> <fichier>
# ex : datemodif ymd tutu.txt
# ex : datemodif m-d tutu.txt
# ex : datemodif "D M Y" tutu.txt
#
# Heure de modif :
# s : 01-59
# m : 01-12
# h : 01-24
# i : 01-12 am/pm
#
# Jour de modif :
# d : 01-31
# D : Lun-Dim
# e : lun-dim
# F : Lundi - Dimanche
# g : lundi - dimanche
# M : 1-12
# N : Jan-Dec
# n ; jan-dec
# O : Janvier-Decembre
# o : janvier-decembre
# y : 02
# Y : 2002
%weekday=(
"0"=>"Dim",
"1"=>"Lun",
"2"=>"Mar",
"3"=>"Mer",
"4"=>"Jeu",
"5"=>"Ven",
"6"=>"Sam",
);
%lweekday=(
"0"=>"Dimanche",
"1"=>"Lundi",
"2"=>"Mardi",
"3"=>"Mercredi",
"4"=>"Jeudi",
"5"=>"Vendredi",
"6"=>"Samedi",
);
%month=(
"1"=>"Jan",
"2"=>"Fev",
"3"=>"Mar",
"4"=>"Avr",
"5"=>"Mai",
"6"=>"Juin",
"7"=>"Juil",
"8"=>"Aout",
"9"=>"Sept",
"10"=>"Oct",
"11"=>"Nov",
"12"=>"Dec",
);
%lmonth=(
"1"=>"Janvier",
"2"=>"Février",
"3"=>"Mars",
"4"=>"Avril",
"5"=>"Mai",
"6"=>"Juin",
"7"=>"Juillet",
"8"=>"Aout",
"9"=>"Septembre",
"10"=>"Octobre",
"11"=>"Novembre",
"12"=>"Décembre",
);
if (!@ARGV ) {
help();
exit;
}
$file=pop;
if (!-e $file) {
print "File $file not found, aborting.\n";
print "Calling script with no arguments prints help\n" ;
exit;
}
$arg = join " ",@ARGV;
$mtime = (stat($file))[9];
($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = localtime($mtime);
$year+=1900;
$mon++;
if ($hour > 12) {
$hour_ampm=abs($hour - 12); $p="pm"
} else {
$hour_ampm="$hour"; $p="am"
}
$ssec=&paf($sec);
$mmin=&paf($min);
$hhour=&paf($hour);
$hhour_ampm=&paf($hour_ampm);
$dday=&paf($day);
$mmon=&paf($mon);
$yyear=substr($year,2,2);
$arg=" ".$arg;
$result = "";
$translated = 0;
foreach $letter (split //,$arg) {
$translated = 0;
# time
&pouet("s",$ssec);
&pouet("t",$sec);
&pouet("m",$mmin);
&pouet("u",$min);
&pouet("h",$hhour);
&pouet("g",$hour);
&pouet("i",$hhour_ampm);
&pouet("k",$hour_ampm);
&pouet("p",$p);
# day
&pouet("d",$dday);
&pouet("D",$day);
&pouet("W",($weekday{"$wday"}));
&pouet("w",lc($weekday{$wday}));
&pouet("X",$lweekday{$wday});
&pouet("x",lc($lweekday{$wday}));
# month
&pouet("M",$mmon);
&pouet("T",$mon);
&pouet("N",$month{$mon});
&pouet("n",lc($month{$mon}));
&pouet("O",$lmonth{$mon});
&pouet("o",lc($lmonth{$mon}));
# year
&pouet("y",$year);
&pouet("Y",$yyear);
$previousletter=$letter;
if (!$translated) { $result.=$letter }
}
$result=~s/^ //;
$result=~s/\^//;
print "$result";
sub pouet {
my ($in,$out) = @_ ;
if ($previousletter ne "^" && $letter eq $in) {
$letter =~ s/$in/$out/g ;
$result .= $letter;
$translated=1;
}
return
}
sub paf {
my ($in)=@_ ;
if ($in < 10) {$in="0".$in}
return $in;
}
sub help {
print <<ENDHELP;
Output modification time and date in various format.
Usage :
$0 <optional format> [file]
Format arguments are :
arg value (output)
> Time
s : seconds (01-59)
t : seconds (1-59)
m : minutes (01-12)
u : minutes (1-12)
h : hour (01-24)
g : hour (1-24)
i : hour (01-12)
k : hour (1-12)
p : am or pm (am-pm)
> Day
d : monthday (01-31)
D : monthday (1-31)
W : weekday (Lun-Dim)
w : weekday (lun-dim)
X : weekday (Lundi-Dimanche)
x : weekday (lundi-dimanche)
> Month
M : month (01-12)
T : month (1-12)
N : month (Jan-Dec)
n : month (jan-dec)
O : month (Janvier-Decembre)
o : month (janvier-decembre)
> Year
y : year (02)
Y : year (2002)
To escape an argument, use ^
Edit the script ($0) to translate weekdays and months if you wish.
Examples :
$0 ymd tutu.txt
$0 m-d tutu.txt
$0 D M Y tutu.txt
$0 ^dd^mm^yy tutu.txt
ENDHELP
}