#include <hallo.h> Udo Mueller wrote on Wed Mar 13, 2002 um 03:41:02PM: > Hallo Leute, > > ich möchte gerne meine Mailboxen klein halten und würde mutt gern > veranlassen, automatisch bei Betreten oder verlassen alle Mails Dafür braucht es keinen Mutt, siehe Anhang. MfG, Eduard. -- #include <welt_ist_doch_ein_dorf.h>
#!/usr/bin/perl # mail-expire, Version 0.0.3, Mon Apr 16 14:40:40 CEST 2001 # Copyright: Eduard Bloch <blade@debian.org> # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. The full text of GPL can be # found on http://www.gnu.org or in /usr/share/common-licenses/GPL on # modern Debian systems. # # ----------------------------------------------------------------------- # If you make changes to this script, please feel free to forward the new # version to <blade@debian.org> or <eduard@bloch.com> # ----------------------------------------------------------------------- die "Usage: $0 DAYS FILES\nwhere\nDAYS is an integer specifying the maximum age of a mail in days and\nFILES one or more mbox file(s).\n" if ($#ARGV < 1 | $ARGV[0]=~/[:^digit:]/); use Date::Manip; $c=-1; $today = ParseDate("today"); $olddate = localtime(time - $ARGV[0] * 86400); $olddate =~ s/\ /_/g; JOB: foreach $file (1..$#ARGV) { close(neu); close(alt); undef @st; undef @time; undef @data; undef $c; (undef,undef,undef,undef,undef,undef,undef,$oldsize)=stat("$ARGV[$file]"); if ($oldsize == 0) { syswrite(STDOUT,"Empty file $ARGV[$file], skipping"); next JOB }; if(!open(fh,"<$ARGV[$file]")) { syswrite(STDOUT,"$ARGV[$file] could not be opened, skipping"); next JOB; }; if(flock(fh,2|4)){ # lock when not locked allready by another process flock(fh,2); } else { # skip file close(fh); syswrite(STDOUT,"$ARGV[$file] is locked by an other prozess, skipping."); next JOB; }; syswrite (STDOUT,"Reading $ARGV[$file] ($oldsize bytes) "); 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; # grep and store time lines in time array, index-nr = c syswrite (STDOUT,"."); } $data[$c] = $data[$c] . $_; # store mail contents in data array, index-nr = c } syswrite (STDOUT,"\n"); close(fh); open(neu,">$ARGV[$file]".".tmp"); open(alt,">$ARGV[$file]".".$olddate"); for(0..$c) { @calc = split(/:/, &DateCalc(&ParseDate($time[$_]),$today)); $diff = ($calc[2] * 7) + $calc[3]; syswrite(STDOUT, $time[$_]." -> Age: $diff day".(($diff > 1) ? "s" :"")." -> "); if ($diff > $ARGV[0]) { print alt $data[$_]; $alte++; syswrite(STDOUT, "old.\n"); } else { print neu $data[$_]; $neue++; syswrite(STDOUT, "new.\n"); } } # MUST BE CLOSED BEFORE STAT'ING THEM close(neu); close(alt); (undef,undef,undef,undef,undef,undef,undef,$newsize)=stat("$ARGV[$file]".".tmp"); @st = stat("$ARGV[$file]".".$olddate"); $newsize += $st[7]; syswrite (STDOUT,"Wrote $neue new entries to $ARGV[$file]".".tmp\n"); syswrite (STDOUT,"Wrote $alte old entries to $ARGV[$file]".".$olddate\n"); if($oldsize == $newsize) { syswrite (STDOUT,"Deleting $ARGV[$file]... "); unlink("$ARGV[$file]") || die "failed"; syswrite (STDOUT,"replacing with the new mailbox... "); rename("$ARGV[$file]".".tmp", "$ARGV[$file]") || die "failed"; syswrite (STDOUT,"done.\n"); } else { syswrite(STDOUT,"hm, $oldsize = $newsize?"); } }
Attachment:
pgpt6cKxdjSuw.pgp
Description: PGP signature