[Debian] Mailbox ausmisten
Hallo Debian-User,
hier ist meine Lösung für das alte Problem. Braucht das Paket
libdate-manip-perl. Das Skript gehört z.B. nach /usr/local/bin, mit
"chmod +x" ausführbar machen.
MfG,
Eduard.
--
====================================================================
Eduard Bloch <blade@debian.org>; HP: http://eduard.bloch.com/edecosi
0xEDF008C5(GnuPG): E6EB 98E2 B885 8FF0 6C04 5C1D E106 481E EDF0 08C5
**
"Computer sind nicht logisch, Windows98 auch nicht und beides zusammen,
NaJaaa" Mirko @ NBCGIGA 13.7.1999
#!/usr/bin/perl
# License: GP
# Copyright: Eduard Bloch <blade@debian.org>
die "Usage: $0 DAYS FILE\nwhere\nDAYS is an integer specifying the maximum age of a mail and\nFILE a pathname of the mbox file.\n" if $#ARGV < 0;
use Date::Manip;
$c=-1;
$today = ParseDate("today");
#print $ARGV[0];exit;
@st = stat("$ARGV[1]");
$oldsize = $st[7];
syswrite (STDOUT,"Reading $ARGV[1] ($oldsize bytes) ");
open(fh,"<$ARGV[1]");
while(<fh>) {
if(/^From\s.*\@.*\s(\S\S\S\s\S\S\S\s\d\d\s\d\d:\d\d:\d\d\s\d\d\d\d)/) {
$c++;
$time[$c]=$1;
syswrite (STDOUT,".");
}
$data[$c] = $data[$c] . $_;
}
syswrite (STDOUT,"\n");
$olddate = localtime(time - $ARGV[0] * 86400);
$olddate =~ s/\ /_/g;
#print $olddate;exit;
open(neu,">$ARGV[1]".".tmp");
open(alt,">$ARGV[1]".".$olddate");
for(0..$c) {
@calc = split(/:/, &DateCalc(&ParseDate($time[$_]),$today));
$diff = ($calc[2] * 7) + $calc[3];
print $time[$_]." -> Age: $diff day".(($diff > 1) ? "s" :"")." -> ";
# print @calc;
# print $time[$_]."\n";
# print ."\n";
if ($diff > $ARGV[0]) {
print alt $data[$_];
print "old.\n";
}
else {
print neu $data[$_];
print "new.\n";
}
}
close(neu);
close(alt);
close(fh);
@st = stat("$ARGV[1]".".tmp");
$newsize = $st[7];
syswrite (STDOUT,"Wrote $st[7] to $ARGV[1]".".tmp\n");
@st = stat("$ARGV[1]".".$olddate");
syswrite (STDOUT,"Wrote $st[7] to $ARGV[1]".".$olddate\n");
$newsize += $st[7];
if($oldsize == $newsize) {
syswrite (STDOUT,"Deleting $ARGV[1]... ");
unlink("$ARGV[1]") || die "failed";
syswrite (STDOUT,"replacing with the new mailbox... ");
rename("$ARGV[1]".".tmp", "$ARGV[1]") || die "failed";
syswrite (STDOUT,"done.\n");
}
Reply to: