[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: