03-02-2001, 15:00
Hallo,
da auf meine frage zwecks mail-filterung niemand antwortet
hab ich mich mal dran gemacht,
bitte berücksichtigt das ich ein absoluter Bash-script-Newbie bin
es folgt jetzt das script:
--->>>
cd /var/spool/mqueue # ins verzeichnis mqueue
maxgroesse=2048 #mehr dar er nicht
user=berell # zur zeit leider o. funktion
ls -s d* > wx.0 # dateien df* incl grösse in wx.0 screiben
ls d* > wx.4 # in wx.4 stehen nur die Dateinamen
wc -l wx.0 > wx.1 #anzahl Wörter ermitteln
# erst mal die anzahl der vorhanden dateien ermitteln
# hierzu wird das von wc ermittelte ergebniss um den angehängten datei-namen
# verkürzt es bleibt die zahl :
# und wird glecihzeitig an die variable zahl übergeben
zahl=`sed -e 's/\([0-9]*\)\(wx.*\)/\1/' wx.1`
#mal sehen was mer so haben:
echo "zahl:$zahl"
# so jetzt wisse mer die anzahl der dateien aber
# jetze müsse mer die grösse der dateien ermitteln
# wir schneiden die dateinamen das von ls -l ermittelte ergebniss ab
# und erhalten die grösse als liste und kneule die in wx.3
sed -e 's/\([0-9]*\)\(df.*\)/\1/' wx.0 > wx.3 #filtern nach 1.zahl nicht nach
# nahme
# jetzt müssen wir in einer schleife die größe untersuchen und wenn sie zu
# gross ist müssen wir festellen welche datei zu gross ist
# dann schauen wir nach wer den diese shit-datei verschicken wollte
# und wenn es der richtige user war wird sie halt einfach gelöscht :-))
x=1
#schleife muss so lang laufen wie es dateien gibt
while [ $x -le $zahl ] ; do
# wir brauche immer nur die erste zeile zu untersuchen
groesse=`sed -n -e '1 p' wx.3`
# hier muss die zu große datei festgestellt werden
if [ $groesse -le $maxgroesse ]; then # wenn kleiner oder gleich isses mir
#egal
echo "$groesse ist kleiner bzw gleich als 2MB"
# wenn nicht müssen wir mal schauen !
else
echo "$groesse ist größer als 2MB bitte löschen"
# ermitteln wer der eigner ist
# dazu muss noch die endung getauscht werden df... -> qf...
#erst mal erstes zeichen abschneiden
datei=`sed -n -e '1 p' wx.4|cat $1|cut -c2-`
# dann ein q davor
datei=`expr q$datei`
#mal sehen ob es funzt :
echo "datei=$datei"
# dursuchen nach dem sender
# bei verwendung von outlock od netscape:
# Hier muss der username eingesetzt werden :!!!!!!
wersendet=`awk '/berell/' $datei|cut -c-8`
echo "wersendet :$wersendet"
if [ $wersendet = "berell" ]; then
loesche=1
geloescht=`sed -n -e '1 p' wx.4`
echo "Datei wird gelöscht :$geloescht"
rm $geloescht
fi
fi
echo "löschen ?:$loesche"
tail -n $((`cat wx.3 | wc -l`-1)) wx.3 > tmp.$$; mv tmp.$$ wx.3
tail -n $((`cat wx.4 | wc -l`-1)) wx.4 > tmp.$$; mv tmp.$$ wx.4
x=`expr $x + 1`
done
rm wx.*
<----
das script arbeitet so wie gedacht,
es wird im verzeichnis /var/spool/mqueue nach dateien gesucht die grösser
als x (2048) sind ,danach wird ermittelt wer die datei gesendet hat.
wenn es der bestimmte user ist, wird sie gelöscht.
(funzt natürlich nur wenn die mails in mqueue gespeichert sind und von hand
bzw. später per cron gesendet werden)
es müsste allerdings noch einiges verfeinert werden, was mir über meinen
momentanen horizont wächst : der user müsste oben als variable angegeben
werden und auch die abfrage mit awk funzt,
damit dieser nicht weiter unten von hand eingegeben werden muss .
aber wie ?
desweiteren : wie kann man dann eine mail an den user schicken, das er mal
wieder sein max-space überschritten hat ??
über verbesserungs-vorschläge jeglicher art wär ich sehr interresiert, da ich
noch vieeeeel lernen muß
erst mal danke.
-grüße bernd
[Dieser Beitrag wurde von berell am 03. Februar 2001 editiert.]
da auf meine frage zwecks mail-filterung niemand antwortet
hab ich mich mal dran gemacht,
bitte berücksichtigt das ich ein absoluter Bash-script-Newbie bin
es folgt jetzt das script:
--->>>
cd /var/spool/mqueue # ins verzeichnis mqueue
maxgroesse=2048 #mehr dar er nicht
user=berell # zur zeit leider o. funktion
ls -s d* > wx.0 # dateien df* incl grösse in wx.0 screiben
ls d* > wx.4 # in wx.4 stehen nur die Dateinamen
wc -l wx.0 > wx.1 #anzahl Wörter ermitteln
# erst mal die anzahl der vorhanden dateien ermitteln
# hierzu wird das von wc ermittelte ergebniss um den angehängten datei-namen
# verkürzt es bleibt die zahl :
# und wird glecihzeitig an die variable zahl übergeben
zahl=`sed -e 's/\([0-9]*\)\(wx.*\)/\1/' wx.1`
#mal sehen was mer so haben:
echo "zahl:$zahl"
# so jetzt wisse mer die anzahl der dateien aber
# jetze müsse mer die grösse der dateien ermitteln
# wir schneiden die dateinamen das von ls -l ermittelte ergebniss ab
# und erhalten die grösse als liste und kneule die in wx.3
sed -e 's/\([0-9]*\)\(df.*\)/\1/' wx.0 > wx.3 #filtern nach 1.zahl nicht nach
# nahme
# jetzt müssen wir in einer schleife die größe untersuchen und wenn sie zu
# gross ist müssen wir festellen welche datei zu gross ist
# dann schauen wir nach wer den diese shit-datei verschicken wollte
# und wenn es der richtige user war wird sie halt einfach gelöscht :-))
x=1
#schleife muss so lang laufen wie es dateien gibt
while [ $x -le $zahl ] ; do
# wir brauche immer nur die erste zeile zu untersuchen
groesse=`sed -n -e '1 p' wx.3`
# hier muss die zu große datei festgestellt werden
if [ $groesse -le $maxgroesse ]; then # wenn kleiner oder gleich isses mir
#egal
echo "$groesse ist kleiner bzw gleich als 2MB"
# wenn nicht müssen wir mal schauen !
else
echo "$groesse ist größer als 2MB bitte löschen"
# ermitteln wer der eigner ist
# dazu muss noch die endung getauscht werden df... -> qf...
#erst mal erstes zeichen abschneiden
datei=`sed -n -e '1 p' wx.4|cat $1|cut -c2-`
# dann ein q davor
datei=`expr q$datei`
#mal sehen ob es funzt :
echo "datei=$datei"
# dursuchen nach dem sender
# bei verwendung von outlock od netscape:
# Hier muss der username eingesetzt werden :!!!!!!
wersendet=`awk '/berell/' $datei|cut -c-8`
echo "wersendet :$wersendet"
if [ $wersendet = "berell" ]; then
loesche=1
geloescht=`sed -n -e '1 p' wx.4`
echo "Datei wird gelöscht :$geloescht"
rm $geloescht
fi
fi
echo "löschen ?:$loesche"
tail -n $((`cat wx.3 | wc -l`-1)) wx.3 > tmp.$$; mv tmp.$$ wx.3
tail -n $((`cat wx.4 | wc -l`-1)) wx.4 > tmp.$$; mv tmp.$$ wx.4
x=`expr $x + 1`
done
rm wx.*
<----
das script arbeitet so wie gedacht,
es wird im verzeichnis /var/spool/mqueue nach dateien gesucht die grösser
als x (2048) sind ,danach wird ermittelt wer die datei gesendet hat.
wenn es der bestimmte user ist, wird sie gelöscht.
(funzt natürlich nur wenn die mails in mqueue gespeichert sind und von hand
bzw. später per cron gesendet werden)
es müsste allerdings noch einiges verfeinert werden, was mir über meinen
momentanen horizont wächst : der user müsste oben als variable angegeben
werden und auch die abfrage mit awk funzt,
damit dieser nicht weiter unten von hand eingegeben werden muss .
aber wie ?
desweiteren : wie kann man dann eine mail an den user schicken, das er mal
wieder sein max-space überschritten hat ??
über verbesserungs-vorschläge jeglicher art wär ich sehr interresiert, da ich
noch vieeeeel lernen muß
erst mal danke.
-grüße bernd
[Dieser Beitrag wurde von berell am 03. Februar 2001 editiert.]