1*b8ecfcfeSchristos#! /usr/bin/env perl 2*b8ecfcfeSchristosuse warnings; 3*b8ecfcfeSchristosuse strict; 4*b8ecfcfeSchristos 5*b8ecfcfeSchristos# for each filename on the command line 6*b8ecfcfeSchristos# get the modtime 7*b8ecfcfeSchristos# make a backup of the file 8*b8ecfcfeSchristos# - error if there is already a backup? 9*b8ecfcfeSchristos# flush the live version(?) 10*b8ecfcfeSchristos# start a line-by-line copy of the backup to the new file, 11*b8ecfcfeSchristos# doing the BeginDate/EndDate substitution 12*b8ecfcfeSchristos 13*b8ecfcfeSchristos# <!-- #BeginDate format:En1m -->3-oct-11 18:20<!-- #EndDate --> 14*b8ecfcfeSchristos# <!-- #BeginDate format:En2m -->01-Aug-2011 17:56<!-- #EndDate --> 15*b8ecfcfeSchristos# without the 'm' no minutes are included. 16*b8ecfcfeSchristos 17*b8ecfcfeSchristosmy $i; 18*b8ecfcfeSchristosmy $mod_time; 19*b8ecfcfeSchristosmy $stamp; 20*b8ecfcfeSchristosmy @m_abbr = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 21*b8ecfcfeSchristos 22*b8ecfcfeSchristosforeach ( @ARGV ) { 23*b8ecfcfeSchristos $i = $_; 24*b8ecfcfeSchristos $mod_time = (stat ($i))[9]; 25*b8ecfcfeSchristos $stamp = localtime($mod_time); 26*b8ecfcfeSchristos my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = 27*b8ecfcfeSchristos localtime($mod_time); 28*b8ecfcfeSchristos $year += 1900; 29*b8ecfcfeSchristos 30*b8ecfcfeSchristos # print "<$i> at <$stamp>\n"; 31*b8ecfcfeSchristos 32*b8ecfcfeSchristos open(my $IFILE, "<", $i) or die "Cannot open < $i: $!"; 33*b8ecfcfeSchristos open(my $OFILE, ">", $i.".new") or die "Cannot open > $i.new: $!"; 34*b8ecfcfeSchristos while(<$IFILE>) { 35*b8ecfcfeSchristos if (/(.*<!--\s*#BeginDate\s*format:)(\S*)(\s*-->).*(<!--\s*#EndDate\s*-->.*)/) { 36*b8ecfcfeSchristos # print "Got: $_"; 37*b8ecfcfeSchristos # print "as: <$1><$2><$3>...<$4>\n"; 38*b8ecfcfeSchristos print { $OFILE } $1,$2,$3; 39*b8ecfcfeSchristos printf { $OFILE } "%s-%s-%s %02d:%02d", $mday,$m_abbr[$mon],$year,$hour,$min; 40*b8ecfcfeSchristos print { $OFILE } $4,"\n"; 41*b8ecfcfeSchristos } 42*b8ecfcfeSchristos else { 43*b8ecfcfeSchristos print { $OFILE } $_; 44*b8ecfcfeSchristos } 45*b8ecfcfeSchristos } 46*b8ecfcfeSchristos close($IFILE); 47*b8ecfcfeSchristos close($OFILE); 48*b8ecfcfeSchristos # 49*b8ecfcfeSchristos utime(time, $mod_time, "$i.new") || die "touch $i.new failed: $!"; 50*b8ecfcfeSchristos # 51*b8ecfcfeSchristos rename $i,"$i.old" || die "rename $i,$i.old failed: $!"; 52*b8ecfcfeSchristos rename "$i.new",$i || die "rename $i.new,$i failed: $!"; 53*b8ecfcfeSchristos} 54