3 #=====================================================================
5 # File ID: 943dcc86-5d33-11df-9006-90e6ba3022ac
6 # Leser første og siste datoen i access_log og skifter navn på den til
7 # formatet NAVN.ååååmmddTttmmssZ-ååååmmddTttmmssZ.access_log
9 # ©opyleft 2004 Øyvind A. Holm <sunny@sunbase.org>
10 # Lisens: GNU General Public License versjon 2 eller senere ♥
11 #=====================================================================
18 our ($opt_h, $opt_n, $opt_s) =
25 'Jan' => 0, 'Feb' => 1, 'Mar' => 2, 'Apr' => 3, 'May' => 4, 'Jun' => 5,
26 'Jul' => 6, 'Aug' => 7, 'Sep' => 8, 'Oct' => 9, 'Nov' => 10, 'Dec' => 11
31 my $Name = length($opt_n) ?
"$opt_n." : "";
36 my $Head = `head -1 $File`; # Halv-FIXME. Men det funker.
37 my $Tail = `tail -1 $File`;
38 if (length("$Head$Tail")) {
39 my $Destfil = sprintf("%s%s-%s.access_log", $Name, access_date
($Head), access_date
($Tail));
41 warn("$Destfil finnes allerede, skifter ikke filnavn.\n");
43 printf("%s → %s%s\n", $File, $Destfil, $opt_s ?
" (simulerer)" : "");
45 rename($File, $Destfil) || warn("rename($File, $Destfil): $!\n")
49 warn("$File: Fila er tom, skifter ikke navn på den.\n");
52 warn("$File: Finnes ikke.\n");
59 if ($Linje =~ m
#^\S+\s+\S+\s+\S+\s+\[(\d\d)/(...)/(\d\d\d\d):(\d\d):(\d\d):(\d\d) ([+\-]\d\d)(\d\d)#) {
60 my ($Day, $Mon, $Year, $Hour, $Min, $Sec, $zone_hour, $zone_min) =
61 ( $1, $2, $3, $4, $5, $6, $7, $8);
62 my $num_mnd = $Mnd{$Mon};
63 my $Secs = timegm
($Sec, $Min, $Hour, $Day, $num_mnd, $Year);
64 $Secs -= ($zone_hour*3600 + $zone_min*60);
65 my ($u_sec, $u_min, $u_hour, $u_mday, $u_mon, $u_year, $u_wday, $u_yday) = gmtime($Secs);
66 $u_year += 1900; # Urgh
67 $Retval = sprintf("%04u%02u%02uT%02u%02u%02uZ", $u_year, $u_mon+1, $u_mday, $u_hour, $u_min, $u_sec);
69 die("Ukjent linjeformat: \"$Linje\", avbryter.\n");
79 Syntax: $0 [valg] fil [flere filer [...]]
81 Leser første og siste datoen i en access_log laget av Apache og skifter
82 filnavnet til [NAVN.]ååååmmddTttmmssZ-ååååmmddTttmmssZ.access_log
87 -n NAVN Bruk NAVN som prefiks til filnavnet.
88 -s Simulering, ikke skift navn på fila.
90 Det er selvfølgelig UTC som brukes. Trenger head(1) og tail(1).
92 Krota sammen av Øyvind A. Holm <sunny\@sunbase.org>
93 Lisens: GNU General Public License versjon eller senere ♥
101 # End of file access_log-date