• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell-Script nach FTP-Upload

LittleJo

Newbie
Hallo Forum,

folgende Sache würde ich gern realisieren:

Auf meinem kleinen Server habe ich den vsFTPd laufen. Nach einem Upload würde ich nun gern die Dateien in ein weiteres Verzeichnis verschieben und das möglichst zeitnah, ohne aber alle zwei Sekunden mein Shell-Script via Cron anschubsen zu müssen. Gibt es eine Möglichkeit das Shell-Script genau dann auszuführen, wenn eine Datei gespeichert worden ist :?:

Besten Dank und Gruß
LittleJo
 
A

Anonymous

Gast
ein script mit ungefähr folgendem inhalt schreiben:

ls VERZEICHNIS | grep -v grep | grep * > /dev/null
variable_setzen=$(ls VERZEICHNIS | grep -v grep | grep *)
check=$?
[ $check -eq 0 ] && mv $variable_setzen NEUES VERZEICHNIS

dann speichern, chmod +x auf das script, und selbiges dann in bestimmten zeitabständen per cron ausführen lassen.
andere möglichkeiten fallen mir jetzt grad nicht ein.....sorry
 

snaewe

Hacker
Was soll das 'grep -v grep' und warum das erste 'ls VERZEICHNIS | grep -v grep | grep * > /dev/null' ?
 
A

Anonymous

Gast
wenn man greppt ohne das grep -v grep zeigt er (meisstens) sich selbst an, dun das dev/null ist damit das check=$? überhaupt funktioniert...../dev/null speichert ergebnisse im binären format glaube ich, und deshalb kann man auslesen ob etwas gefunden/nicht gefunden wurde damit

soviel zum thema linux-shell-script programmierung :)

--> analysier einfach mal den code genau, du wirst feststellen dass das sinnvoll ist, man kann es natürlich (wie immer) elegantzer lösen aber hauptsache es geht, ne...
 

snaewe

Hacker
tha_specializt schrieb:
wenn man greppt ohne das grep -v grep zeigt er (meisstens) sich selbst an,
Ja, bei 'ps aux|grep blah' macht das Sinn - aber hier ?

tha_specializt schrieb:
dun das dev/null ist damit das check=$? überhaupt funktioniert.....
Aber $? enthält den Returncode der letzten ausgeführten 'Foreground Pipeline'
info bash schrieb:
`?'
Expands to the exit status of the most recently executed foreground
pipeline.

tha_specializt schrieb:
/dev/null speichert ergebnisse im binären format glaube ich, und deshalb kann man auslesen ob etwas gefunden/nicht gefunden wurde damit
/dev/null speichert gar nicht. Es ist eine reine Senke - Schwarzes Loch

Im Prinzip ist das richtig, was du sagst, aber da du nach dem 'grep ...>/dev/null' noch was anderes ausführts, ist der Return-Code ja ein anderer.

tha_specializt schrieb:
--> analysier einfach mal den code genau, du wirst feststellen dass das sinnvoll ist, man kann es natürlich (wie immer) elegantzer lösen aber hauptsache es geht, ne...
Geht's wirklich ?
 
A

Anonymous

Gast
natürlich gehts, ich wende es jeden tag an.....tippfehler ausgeschlossen....falls ein zeichen oben ned stimmen sollte bitte hauen! :lol:
ich kann ned genau sagen warum, aber wenn man dies benutzt liest es tatsächlich /dev/null aus, denn null speichert sachen, allerdings nur ob JA/nein, mehr nicht, und das reicht ja zum suchen
 

snaewe

Hacker
  1. Nein, du liest nicht /dev/null aus, sondern wertest lediglich den Return-Code aus (und der wird nicht in /dev/null, sondern in $? gespeichert)
  2. Das 'grep -v grep' macht da definitiv keinen Sinn (im Gegentum - wenn jemals eine Datei mit dem Namen IrgenwasgrepIrgendwas in dem besagten Verzeichnis erscheint, wird die ausgelassen)
 
A

Anonymous

Gast
und wieso funzt es dann? wieso legt das system mein ergebnis in $? ab anstatt in null ?
 

snaewe

Hacker
tha_specializt schrieb:
und wieso funzt es dann?
Zufall...
Siehe den Hinweis auf die Datei 'IrgendwasgrepIrgendwas'

tha_specializt schrieb:
wieso legt das system mein ergebnis in $? ab anstatt in null ?
Das ist ein Feature der bash (anderer Shells wahrscheinlich ebenso) den Return-Code eines Programms (bzw. einer 'foreground pipeline') in $? abzulegen.
Siehe auch hier: http://www.tldp.org/LDP/abs/html/exit-status.html

Und nochmal laut: IN /dev/null KANN MAN NIX ABLEGEN
 
Oben