Portál AbcLinuxu, 12. května 2025 10:10
Pro učení spamassassinu využívám toho, že si skriptem kopíruji Spamy uživatelů do účtu postmastera a potom SA učím. Háček je v tom, že vznikají duplikáty kopií. Asi to bude rozdílem přečtené/nepřečtené, ačkoliv kopíruji pouze .Spam/cur. Proč? Jak mám skript upravit, aby nekopíroval pořád ty samé zprávy, které se asi jen jinak jmenují?
for mailbox in `ls /home/vmail/domena.cz/`; do
if [ "$mailbox" != "postmaster@domena.cz" ]; then
for message in `ls /home/vmail/domena.cz/$mailbox/Maildir/.Spam/cur/`; do
cp /home/vmail/domena.cz/$mailbox/Maildir/.Spam/cur/$message /home/vmail/domena.cz/postmaster@domena.cz/Maildir/.Spam/cur -u -p -f &>/dev/null
done
echo -n "."
fi
done
Chtělo by to něco co by porovnávalo i nějak ty obsahy zpráv. Pokud jsem kopíroval vše pomocí cp /zdroj/* /někam -u -p -f, tak to duplikáty nedělalo. Ale ejhle, "argument list too long", tak jsem musel udělat toto.
Tak jsem si napsal skript, ktery funguje. Ale mam problem, ze jednoho uzivatele(rikejme mu stanek@domena.cz) se ty zpravy stale kopirujui, i kdyz uz tam jednou zkopirovany jsou a pritom se tam nedokopiruji, teda cp je spusten ale do ciloveho adresare se to nedostane a proto se to pri dalsim spusteni skriptu pokousi zas to same kopirovat a tak porad dokola. Pokud prikaz cp provedu rucne vne skriptui tak to jede. Je to docela divny. Zadny chybovy hlasky. Mam tam nekde chyby?:
#!/bin/sh
copyqueue=".Spam .Ham"
for item in $copyqueue; do
if [ "$item" == ".Spam" ]; then
echo "KOPIRUJI SPAM"
fi
if [ "$item" == ".Ham" ]; then
echo "KOPIRUJI HAM"
fi
rovnost_vse=0
for domainDir in `ls /home/vmail/*.cz -d`; do
rovnost=0
echo -n `echo $domainDir | awk -F\/ '{print $4}'`
echo -n " "
for mailbox in `ls $domainDir/`; do
if [ "$mailbox" != "postmaster@domena.cz" ]; then
ls $domainDir/postmaster@domena.cz/Maildir/$item/cur/ 2>/dev/null | sed 's/\:2\(.*\)//g' > /tmp/NaucSA.dst
ls $domainDir/$mailbox/Maildir/$item/cur/ 2>/dev/null | sed 's/\:2\(.*\)//g' > /tmp/NaucSA.src
addto=`diff /tmp/NaucSA.src /tmp/NaucSA.dst | grep '^< ' | awk '{print $2}' > /tmp/NaucSA.add`
for message in `cat /tmp/NaucSA.add`; do
rovnost=`expr $rovnost + 1`;
rovnost_vse=`expr $rovnost_vse + 1`;
#ls $domainDir/$mailbox/Maildir/$item/cur/$message* >> /tmp/mess
cp $domainDir/$mailbox/Maildir/$item/cur/${message}* /home/vmail/domena.cz/postmaster@domena.cz/Maildir/$item/cur -u -p -f
done
echo -n "."
fi
done
echo " $rovnost"
done
echo "> $rovnost_vse <"
echo ""
done
rm /tmp/NaucSA.dst
rm /tmp/NaucSA.src
rm /tmp/NaucSA.add
echo ""
echo "Nyni mate moznost pretridit spamy a hamy. SpamAssassin se bude ucit ze slozek Spam_korekce a Ham_korekce"
echo -n "Mohu zacit uceni? [a,n] "
read learn_answer
echo ""
if [ "$learn_answer" == "a" ]; then
echo "SPAMASSASSIN SE UCI"
sa-learn --spam /home/vmail/domena.cz/postmaster@domena.cz/Maildir/.Spam_korekce/cur --progress
sa-learn --ham /home/vmail/domena.cz/postmaster@domena.cz/Maildir/.Ham_korekce/cur --progress
chown amavis:amavis /root/.spamassassin -R
fi
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.