Aurélien Beaujean [EMAIL PROTECTED] - Tue, Sep 10, 2002:
PS: c'est vrai qu'une archive par mois au format mbox serait le
bienvenu. Quelqu'un se dévoue pour nous faire un petit script à base de
de cron et de grepmail pour que je les publient sut muttfr.org ? :)
J'ai bien un bidule qui ressemble sous la main :
Tous les jours je vérifie qu'il n'y a pas de mail vieux de plus de N
jours dans une liste de boîtes.
Inconvénient majeur : il fonctionne sur les boîtes au format Maildir,
et pas mbox.
Explication : si vous voulez supprimer un mail d'une boîte assez grosse
avec formail, il faut l'utiliser en filtre et en même temps l'appeler
pour récupérer le champ Date: dans les headers ce qui implique soit
une boucle en n² (ou n est le nombre de messages à traiter dans la
boîte) ou bien une duplication de la boîte (dans ce cas autant utiliser
procmail).
Cependant, j'ai converti mes boîtes au format Maildir, et
c'est un vrai bonheur. Il est plus rapide de déplacer, supprimer
un message, surtout dans ce genre de scripts. En plus il est
possible de faire des constructions shell agréables comme
for message in mailbox/cur/*; do ... done
Bref, j'attache mon bousin, il me permet de supprimer les messages
de listes archivées sur le net pour que les boîtes ne grossissent pas
trop. Ça peut servir à quelqu'un.
Je suppose que c'est _beaucoup_ plus facile à faire dans le cas
où on duplique la mbox sans supprimer de message, en gros c'est un
formail -s.
Enfin, la solution qui tue dans ce cas particulier :
:0:
* mutt
/var/www/mutt/`date +%y-%m`-mutt
... ou quelque chose d'approchant en intégrant les précédentes
propositions de procmail.
--
Loïc Minier [EMAIL PROTECTED]
#!/bin/sh
# deletes mail older than a specified date in mailboxes in Maildir
# format
TEMP=`getopt -o vh --long verbose,help -n $0 -- $@`
[ $? != 0 ] (echo Terminating... 2; exit 1)
eval set -- $TEMP
VERBOSE=0
while true ; do
case $1 in
-v|--verbose) VERBOSE=1; shift;;
-h|--help) echo Usage: $0 [-v|--verbose] [-h|--help]; exit 0; shift;;
--) shift; break;;
*) echo Internal error!; exit 1;;
esac
done
say()
{
[ $VERBOSE -eq 1 ] echo $1
}
del_box()
{
say processing $1
(rmdir ~/mail/$1/cur/ 2/dev/null mkdir ~/mail/$1/cur/) \
|| for j in ~/mail/$1/cur/*
do
k=`formail -x Date $j`
d=`date -d $k +%s`
if [ $d ]
then
delta=$(($3 - $d))
if [ $delta -gt $2 ]
then
rm -f $j
fi
else
echo problem with $j in $i 2
fi
done
}
for i in \
2-h \
via/anciens \
via/batavia \
via/bruit \
via/diff\
via/perms \
via/roots \
do
del_box $i 1814400 `date +%s` # 21 days from now
done
for i in \
debian/security \
security/bugtraq\
spam\
via/fw/firewall \
via/fw/top-50-ext \
via/fw/top-50-proxy \
vl/announce \
vl/libdvbpsi-devel \
vl/libdvdcss-devel \
vl/libdvdplay-devel \
vl/vlc-devel\
vl/vlcs \
vl/vlcs-devel \
vl/vls-devel\
via/nt \
via/via \
do
del_box $i 604800 `date +%s`# 7 days from now
done