Ordner ueberwachen + neue Dateien automatisch ausfuehren?
![](https://seccdn.libravatar.org/avatar/46d7f6580b35df1e0d83b86c388bf078.jpg?s=120&d=mm&r=g)
Hallo, ich möchte einen Ordner ständig auf neue Dateien überprüfen lassen. Wird ein neues File gefunden, soll die Datei über /bin/sh aufgerufen und danach gelöscht werden. Wie lässt sich das am besten realieseren? greetinXs, Michael Hilscher -- Avantgardisten sind Leute, die nicht wissen, wo sie hinwollen, aber als erste dasein möchten.
![](https://seccdn.libravatar.org/avatar/693daf506302e8c4f634507482cbc177.jpg?s=120&d=mm&r=g)
ich möchte einen Ordner ständig auf neue Dateien überprüfen lassen. Wird ein neues File gefunden, soll die Datei über /bin/sh aufgerufen und danach gelöscht werden.
versuchs doch mit einem cron-job ... bau dieses script passend um und lass es z.B. alle10min laufen: (das ist nur ein ansatz, der vielleicht schon funktioniert, aber ich habe es eben schnell hingeknallt, und übernehme keine Garantie ;-) Gruß Thomas ------ #!/usr/bin/perl &Dateiliste #ruft die sub Dateiliste auf &DateiOeffnen #ruft die sub DateiOeffnen auf sub Dateiliste { # listet alle dateien im verzeichnis /quelle/ auf und schreibt diese in /tmp/dateiliste.txt open (file1,"|ls /quelle/ -1 > /tmp/dateiliste.txt"); close (file1); # die dateiliste in /tmp/dateiliste.txt wird in ein feld geschrieben open (file1,"
![](https://seccdn.libravatar.org/avatar/ca2a9c3c942d4e993ea9c4bff7c36339.jpg?s=120&d=mm&r=g)
Hallo,
* Michael Hilscher
Hallo,
ich m�chte einen Ordner st�ndig auf neue Dateien �berpr�fen lassen. Wird ein neues File gefunden, soll die Datei �ber /bin/sh aufgerufen und danach gel�scht werden.
Wie l�sst sich das am besten realieseren?
hier ist ein kleines Script (ungetestet), dass alle 20 Sekunden im aktuellen Verzeichniss nachschaut, ob sich sich einen neue Datei darin befindet. ----------------------------------------- #!/bin/sh last="`ls -t *.* | head -1`" 2>/dev/null while sleep 20; do this="`ls -t *.* | head -1`" 2>/dev/null if test "$this" != "$last"; then last="$this" if test -x "$this"; then "$this" rm "$this" fi fi done ----------------------------------------- bye Bruno
![](https://seccdn.libravatar.org/avatar/735ea797d876adb026ae955e8adbf597.jpg?s=120&d=mm&r=g)
On Die, Jan 30, 2001 at 07:16:50 +0100, Bruno Semrau wrote:
* Michael Hilscher
[010130 15:58]: Hallo,
ich m?chte einen Ordner st?ndig auf neue Dateien ?berpr?fen lassen. Wird ein neues File gefunden, soll die Datei ?ber /bin/sh aufgerufen und danach gel?scht werden.
Wie l?sst sich das am besten realieseren?
Bruno, Dein mutt spuckt einen falschen charset aus. In Deiner Mail steht us-ascii, es muss iso-8859-1 sein (bei Michael stimmte er noch).
hier ist ein kleines Script (ungetestet), dass alle 20 Sekunden im aktuellen Verzeichniss nachschaut, ob sich sich einen neue Datei darin befindet.
----------------------------------------- #!/bin/sh last="`ls -t *.* | head -1`" 2>/dev/null ^ Das ist bei Linux unnötig, im Gegenteil: Dateien ohne Punkt werden ignoriert. ^^^^^^^^^^^ Das muss innerhalb der `` stehen, sonst kriegst Du Fehler von ls trotzdem zu sehen.
while sleep 20; do ^^^^^^^^ halte ich an dieser Stelle für ungünstig, da dann immer (auch wenn noch weitere Dateien vorhanden sind) 20 Sekunden gewartet wird.
this="`ls -t *.* | head -1`" 2>/dev/null
Kommentare wie oben
if test "$this" != "$last"; then last="$this" if test -x "$this"; then
In dieser Version könnte $this auch ein Verzeichnis sein. Der Test -x ist nicht nötig, wenn die Datei über die Shell ausgeführt werden soll.
"$this" rm "$this" fi fi done
Warum so kompliziert? Was machst Du mit $last? Es wird doch nur gesetzt, aber nie verwendet. Ausserdem: man last, das ist ein Kommando, sollte also nicht als Variable verwendet werden. Meine Version (ungetestet): while true; do datei="`ls -t 2>/dev/null | head -1`" if test -f "$datei"; then $SHELL "$datei" rm -f "$datei" fi test -z "$datei" && sleep 20 done Das Ganze in ein Script, welches Du mit nohup scriptname & startest. Auch hier sind noch einige Feinheiten ungeklärt: Dateinamen mit CR, wohin mit Fehlermeldungen, Subdirectories, ... Jan
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, On Die, 30 Jan 2001, Jan Trippler wrote:
while true; do datei="`ls -t 2>/dev/null | head -1`" if test -f "$datei"; then $SHELL "$datei" rm -f "$datei" fi test -z "$datei" && sleep 20 done [..] Auch hier sind noch einige Feinheiten ungeklärt: Dateinamen mit CR, wohin mit Fehlermeldungen, Subdirectories, ...
REF="/var/run/findexec.ref" LOG="/var/log/findexec.log" trap "exit 0" 1 2 3 6 15 while true; do for f in $(find -type f -maxdepth 1 -cnewer $REF && touch $REF); do ( $SHELL "$f" || echo "Can't run $f" >> $LOG ) && \ rm "$f" || echo "Can't remove "$f" >> $LOG done sleep 20 done 1. das kein rm -f verwendet wird ist Absicht. 2. Das ganze ist aber IMO eine ziemlich grosse Sicherheitsluecke um nicht -scheunentor zu sagen... CU David -- "Also zu meiner Zeit gab es so ein Spielzeug am P.C. noch nicht!" sagte der Opa." "Was meinst du?" sagte Fritzchen. "Na diese albernen Tassenhalter auf Knopfdruck. Cd aus Rom oder so!" [WoKo in dag°]
![](https://seccdn.libravatar.org/avatar/735ea797d876adb026ae955e8adbf597.jpg?s=120&d=mm&r=g)
On Mit, Jan 31, 2001 at 01:50:42 +0100, David Haller wrote:
REF="/var/run/findexec.ref" LOG="/var/log/findexec.log"
trap "exit 0" 1 2 3 6 15 while true; do for f in $(find -type f -maxdepth 1 -cnewer $REF && touch $REF);
Über den Einsatz des find hatte ich auch nachgedacht, das hat aber gegenüber der Variante von Bruno (ls -t | head -1), die ich übernommen habe einen entscheidenden Nachteil: find liefert Dateien unsortiert. Wenn also Scripts, die nacheinander kommen, auf den Ergebnissen vorhergehender Scripts aufbauen, dann hast Du hier schlechte Karten. Damit ist u. U. $REF auch nicht unbedingt auf dem Stand der neuesten Datei, was in Verbindung mit dem fehlenden -f beim rm dazu führen könnte, dass Scripts mehrfach ausgeführt werden. Nebenbei: Ich habe es nicht ausprobiert - liefert f korrekte Werte bei Dateien mit Leerzeichen im Namen?
do ( $SHELL "$f" || echo "Can't run $f" >> $LOG ) && \ rm "$f" || echo "Can't remove "$f" >> $LOG done sleep 20 done
1. das kein rm -f verwendet wird ist Absicht.
Welche Absicht steckt dahinter? Ich würde eher darauf achten, dass die Datei auf jeden Fall gelöscht wird.
2. Das ganze ist aber IMO eine ziemlich grosse Sicherheitsluecke um nicht -scheunentor zu sagen...
Volles ACK. Das ist eine Einladung: Kommt und bedient Euch in meinem System. Aber wir wissen ja nicht, woher die Scripts kommen. Wenn das nur aus dem Intranet oder gar dem lokalen Rechner kommt ... Auf jeden Fall etwas, worüber man gründlich nachdenken sollte. Jan
![](https://seccdn.libravatar.org/avatar/ca2a9c3c942d4e993ea9c4bff7c36339.jpg?s=120&d=mm&r=g)
* Jan Trippler
On Die, Jan 30, 2001 at 07:16:50 +0100, Bruno Semrau wrote:
* Michael Hilscher
[010130 15:58]: Hallo,
ich m?chte einen Ordner st?ndig auf neue Dateien ?berpr?fen lassen. Wird ein neues File gefunden, soll die Datei ?ber /bin/sh aufgerufen und danach gel?scht werden.
Wie l?sst sich das am besten realieseren?
Bruno, Dein mutt spuckt einen falschen charset aus. In Deiner Mail steht us-ascii, es muss iso-8859-1 sein (bei Michael stimmte er noch). ich habs gemerkt, nur hab ich keine Ahnung warum. In meiner .muttrc ist set charset="iso-8859-1" angegeben.
bye Bruno
![](https://seccdn.libravatar.org/avatar/f986f4e078198abf7c023b4d57407c6a.jpg?s=120&d=mm&r=g)
On Wed, Jan 31, 2001 at 01:32:28PM +0100, Bruno Semrau wrote:
* Jan Trippler
[010130 23:03]: On Die, Jan 30, 2001 at 07:16:50 +0100, Bruno Semrau wrote:
* Michael Hilscher
[010130 15:58]: Hallo,
ich m?chte einen Ordner st?ndig auf neue Dateien ?berpr?fen lassen. Wird ein neues File gefunden, soll die Datei ?ber /bin/sh aufgerufen und danach gel?scht werden.
Wie l?sst sich das am besten realieseren?
Bruno, Dein mutt spuckt einen falschen charset aus. In Deiner Mail steht us-ascii, es muss iso-8859-1 sein (bei Michael stimmte er noch). ich habs gemerkt, nur hab ich keine Ahnung warum. In meiner .muttrc ist set charset="iso-8859-1" angegeben.
Bug in 1.3.12, verwende entweder 1.3.13 oder versuch mal: # Charset set charset="iso-8859-1" charset-hook us-ascii ISO-8859-1 set send_charset="iso-8859-1:us-ascii:utf-8" in deiner .muttrc. -- MfG Waldemar Brodkorb Every Generation got its own disease - Fury in the Slaughterhause 1993 and we got Aquired Immunodeficiency Syndrome, Bovine Spongiform Encephalopathy and Microsoft Windows 2000 Professional
![](https://seccdn.libravatar.org/avatar/ca2a9c3c942d4e993ea9c4bff7c36339.jpg?s=120&d=mm&r=g)
* Waldemar Brodkorb
On Wed, Jan 31, 2001 at 01:32:28PM +0100, Bruno Semrau wrote:
* Jan Trippler
[010130 23:03]: On Die, Jan 30, 2001 at 07:16:50 +0100, Bruno Semrau wrote:
* Michael Hilscher
[010130 15:58]: Hallo,
ich m?chte einen Ordner st?ndig auf neue Dateien ?berpr?fen lassen. Wird ein neues File gefunden, soll die Datei ?ber /bin/sh aufgerufen und danach gel?scht werden.
Wie l?sst sich das am besten realieseren?
Bruno, Dein mutt spuckt einen falschen charset aus. In Deiner Mail steht us-ascii, es muss iso-8859-1 sein (bei Michael stimmte er noch). ich habs gemerkt, nur hab ich keine Ahnung warum. In meiner .muttrc ist set charset="iso-8859-1" angegeben.
Bug in 1.3.12, verwende entweder 1.3.13 oder versuch mal: Hab ich mir schon gedacht.
# Charset set charset="iso-8859-1" charset-hook us-ascii ISO-8859-1 set send_charset="iso-8859-1:us-ascii:utf-8" Danke, funktioniert. Den send_charset n der muttrc kannte ich nicht deshalb habe ich mir vorher die Sourcen gepatcht.
thx Bruno
![](https://seccdn.libravatar.org/avatar/e8efd891fc055d9843fcbb18465143dc.jpg?s=120&d=mm&r=g)
Hallo, On Wed, 31 Jan 2001 at 13:32 +0100, Bruno Semrau wrote:
* Jan Trippler
[010130 23:03]: On Die, Jan 30, 2001 at 07:16:50 +0100, Bruno Semrau wrote:
* Michael Hilscher
[010130 15:58]: Hallo,
ich m?chte einen Ordner st?ndig auf neue Dateien ?berpr?fen lassen. Wird ein neues File gefunden, soll die Datei ?ber /bin/sh aufgerufen und danach gel?scht werden.
Wie l?sst sich das am besten realieseren?
Bruno, Dein mutt spuckt einen falschen charset aus. In Deiner Mail steht us-ascii, es muss iso-8859-1 sein (bei Michael stimmte er noch). ich habs gemerkt, nur hab ich keine Ahnung warum. In meiner .muttrc ist set charset="iso-8859-1" angegeben.
Das sagt gar nichts. iso-8859-1 gibt nur den Zeichensatz des Terminals an. iso-8859-1 ist sowieso die Vorteinstellung, daher kannst Du das aus der Muttrc entfernen. Den Ausgangszeichensatz bestimmt Mutt selber und auch normalerweise richtig. Wenn in der Mail keine Umlaute (oder sonstige Latin1-Zeichen) drin sind, wird natürlich US-ascii genommen. Hatten wir aber schonmal in der Liste, ca. vor 1 Monat. Gruß, Bernhard -- Viele mehr oder weniger nützliche Tipps auf meiner Homepage: http://members.tripod.de/linuxinfo/ Verbesserungsvorschläge bzw. eigene Tipps an mich mailen! ******************** Gnu PGP-Key: DDAF6454 * Tux# 171705 * ICQ# 98361051
![](https://seccdn.libravatar.org/avatar/46d7f6580b35df1e0d83b86c388bf078.jpg?s=120&d=mm&r=g)
Hallo, danke für die Vorschläge. Habe nun etwas am Problem gearbeitet und bräuchte eigentlich "nur noch" die Möglichkeit einem Shell Script das als CGI über den Browser aufgerufen wird, drei Variablen zu übergeben. Falls das nicht Funkt werde ich wohl zu Perl greifen müssen. #!/bin/sh at $time -f /usr/bin/lynx -dump http://script.php3?name=$name&id=$id
/dev/null 2>&1
Irgendwie komme ich nicht dahinter, wie ich $time, $name und $id im Browser übergeben kann. http://localhost/cgi-bin/auto-cgi?time=16:05&name=bla&id=7 klappt leider nicht... Alternativ könnte ich hergehen und auto-cgi von PHP mit dem gewünschten Befehl erzeugen und danach aufrufen - aber elegant wäre das nicht gerade... many thanXs, Michael Hilscher -- Avantgardisten sind Leute, die nicht wissen, wo sie hinwollen, aber als erste dasein möchten.
participants (7)
-
Bernhard Walle
-
Bruno Semrau
-
David Haller
-
Jan.Trippler@t-online.de
-
Michael Hilscher
-
Thomas Föcking
-
Waldemar Brodkorb