Hallo Leute, kann mir einer der bash-Spezialisten bitte mal auf die Sprünge helfen? Habe ein kleines Script (ein Stück davon aus einem älteren Posting hier abgekupfert), das folgende Aufgabe hat: In /home/profiles des Samba-Servers (PDC) liegen die Benutzer-Profile der Windowsmaschinen. Dort lassen einige Benutzer das Verz. "Temporary Internet Files" auf hunderte von MB vollaufen. Diese Verzeichnisse werden vom Script gescheckt und der Übeltäter ggf. per Mail informiert. Problem: Ich krieg's mit den Leerzeichen im Verz.namen nicht gebacken. Mit einem Verzeichnis wie "Mail" klappt das Script tadellos. Quoten mit Backslash oder "" hilft in meiner Konstruktion nicht ... Die naheliegende Lösung heisst ja da immer "xargs", aber wie? Die Ausgabe von find -print0 kann ich xargs -0 zupipen, aber dann ich will ich ja 4 unterschiedliche Befehle auf das gefundene Verzeichnis loslassen. Kurz gesagt, ich brauche eine Idee. Wahrscheinlich muss ich das komplett umbauen? Nur wissen, wie ... Also hier das Script: #!/bin/bash # # geht natürlich nicht: # watch_dir="Temporary Internet Files" # geht: watch_dir=Mail # max_size in KB ! max_size=1000 for f in `find /home -name "$watch_dir" -type d -printf %p' '` do size_in_kb=`du -sk $f | cut -f1` owner=`find $f -maxdepth 0 -printf %u` realname=`grep $owner /etc/passwd|cut -f5 -d:` test $size_in_kb -gt $max_size && echo -e "\nHallo $realname! \ \nDein Verzeichnis $watch_dir ist zu voll: \n$size_in_kb KB\n" | \ mail -s "1. Mahnung" $owner done # Ende Script Hmmm ...? Joachim
On Don, 04 Okt 2001, Joachim Marx wrote:
kann mir einer der bash-Spezialisten bitte mal auf die Sprünge helfen? [..] Problem: Ich krieg's mit den Leerzeichen im Verz.namen nicht gebacken.
Hier ist mal wieder eine kleine Trickserei mit IFS angebracht :) OIFS="$IFS"; IFS=":" for d in `find /home -name "$watch_dir" -type d -printf %p':'` do #^-----. ^^^!!! ... # `- hier in der Schleife dann statt "$f" "$d" verwenden... # d ist "intuitiver", siehe: "-type d" :)) done IFS="$OIFS" Gruesse, -dnh -- What are you doing?!? The message is over,GO AWAY!
Moin David, * David Haller schrieb am 04 Oct 2001:
On Don, 04 Okt 2001, Joachim Marx wrote:
kann mir einer der bash-Spezialisten bitte mal auf die Sprünge helfen? [..] Problem: Ich krieg's mit den Leerzeichen im Verz.namen nicht gebacken.
Hier ist mal wieder eine kleine Trickserei mit IFS angebracht :)
OIFS="$IFS"; IFS=":"
Was bei mir auch immer gute Dienste geleistet hat ist IFS=" " Dann kann man die for-Schleife ganz "natürlich" angehen. Allerdings dürfen dann die Dateinamen kein 0x0a enthalten, aber das geht unter Windows ja eh nicht. Gruß, Sebastian -- Do not meddle in the affairs of Wizards, for they are subtle and quick to anger. Sebastian Helms - http://www.helms.sh - mailto:mail@helms.sh (PGP welcome) SuSE-Linux-Mailinglisten-FAQ: http://www.helms.sh/faq/
On Thu, 4 Oct 2001 david@dhaller.de (David Haller) writes:
On Don, 04 Okt 2001, Joachim Marx wrote: [..]
Problem: Ich krieg's mit den Leerzeichen im Verz.namen nicht gebacken.
Hier ist mal wieder eine kleine Trickserei mit IFS angebracht :)
Spitzenmäßig! Danke. Hatte ich sowas nicht vor kurzem erst in der Liste gelesen? :o) OK, jetzt wo Du's sagst, erinnere ich mich ... :-)
[...] for d in `find /home -name "$watch_dir" -type d -printf %p':'` do #^-----. ^^^!!! ... # `- hier in der Schleife dann statt "$f" "$d" verwenden... # d ist "intuitiver", siehe: "-type d" :))
Sehe ich auch so. Gruss Joachim
vielen dank !!! hat mir die lösung einer schon lange gärenden kleinigkeit gebracht!!! super! Am Donnerstag 04 Oktober 2001 03:36 schrieb Joachim Marx:
Hallo Leute,
kann mir einer der bash-Spezialisten bitte mal auf die Sprünge helfen?
Habe ein kleines Script (ein Stück davon aus einem älteren Posting hier abgekupfert), das folgende Aufgabe hat: In /home/profiles des Samba-Servers (PDC) liegen die Benutzer-Profile der Windowsmaschinen. Dort lassen einige Benutzer das Verz. "Temporary Internet Files" auf hunderte von MB vollaufen. Diese Verzeichnisse werden vom Script gescheckt und der Übeltäter ggf. per Mail informiert.
Problem: Ich krieg's mit den Leerzeichen im Verz.namen nicht gebacken. Mit einem Verzeichnis wie "Mail" klappt das Script tadellos. Quoten mit Backslash oder "" hilft in meiner Konstruktion nicht ... Die naheliegende Lösung heisst ja da immer "xargs", aber wie? Die Ausgabe von find -print0 kann ich xargs -0 zupipen, aber dann ich will ich ja 4 unterschiedliche Befehle auf das gefundene Verzeichnis loslassen. Kurz gesagt, ich brauche eine Idee. Wahrscheinlich muss ich das komplett umbauen? Nur wissen, wie ...
Also hier das Script:
#!/bin/bash # # geht natürlich nicht: # watch_dir="Temporary Internet Files" # geht: watch_dir=Mail # max_size in KB ! max_size=1000
for f in `find /home -name "$watch_dir" -type d -printf %p' '` do size_in_kb=`du -sk $f | cut -f1` owner=`find $f -maxdepth 0 -printf %u` realname=`grep $owner /etc/passwd|cut -f5 -d:` test $size_in_kb -gt $max_size && echo -e "\nHallo $realname! \ \nDein Verzeichnis $watch_dir ist zu voll: \n$size_in_kb KB\n" | \ mail -s "1. Mahnung" $owner done
# Ende Script
Hmmm ...? Joachim
-- may you always grok in fullness ( http://w3.one.net/~wap/wapGrok.html ) -- from/von/de >mfeilner@f-linux.com< Markus Feilner --------------------------- Linux, Webdesign, Erlangerstr. 2 --------------------------- IT-Consulting 93059 Regensburg ----- 0941/706523--------mobil: 0170/3027092
participants (4)
-
David Haller
-
jomarx@gmx.net
-
Markus Feilner
-
Sebastian Helms