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
- }
Shorter URL
Want to share or tweet this post? Please use this short URL: http://ozh.in/d
This entry "Datemodif perl script" was posted on 07/12/2003 at 11:59 am and is tagged with Code, Linux, Perl
Watch this discussion : Comments RSS 2.0.