PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript, Jobs nacheinander ausführen



gerrie1978ch
21-09-2007, 12:08
Hallo zusammen,

habe mich hier mal angemeldet, in der Hoffnung, ein paar Denkanstösse zu bekommen.

Ich bin nicht sehr erfahren, was Shell-Programmierung angeht, vielleicht könnt Ihr mir helfen. Ich will kein komplettes Script haben, einfach nur ein paar Hinweise.

Folgendes möchte ich machen:

1. Aus einem Verzeichnis alle *.txt in ein anderes Verzeichnis kopieren.

2.Wenn alle kopiert sind, einen Befehl auführen. Dieser schreibt kurz vor Beendigung eine Datei in ein Verzeichnis. (Solange die da ist, wird der Prozess nicht beendet)

3. Gucken, ob diese Datei in dem Verzeichnis liegt, wenn ja, weitere *.txt kopieren

4. Wenn alle Dateien kopiert sind, die angelegte Datei aus Schritt 2 löschen. Dann wird der Prozess beendet.

5. Überprüfen ob der Prozess mit Exit 0 beendet wurde, wenn ja, dann sollen nocheinmal Daten kopiert werden.

Mein Problem ist eigentlich mehr oder weniger, wi ich überprüfe, ob die jeweiligen Einzelschritte komplett beendet wurden, bevor der nächste Schritt gemacht wird. Oder passiert das eh automatisch? Wäre es besser, für jeden Schritt ein einzelnes Skript zu schreiben, und dann jeweils am Ende das Skript für den nächsten Schritt aufzurufen?

Ich danke Euch schon mal für die Hilfe,

Gerrie

BLUESCREEN3D
21-09-2007, 15:14
Mein Problem ist eigentlich mehr oder weniger, wi ich überprüfe, ob die jeweiligen Einzelschritte komplett beendet wurden, bevor der nächste Schritt gemacht wird. Oder passiert das eh automatisch?
Das passiert automatisch - die Befehle werden nacheinander abgearbeitet.


Wäre es besser, für jeden Schritt ein einzelnes Skript zu schreiben, und dann jeweils am Ende das Skript für den nächsten Schritt aufzurufen?
Da das kein besonders umfangreiches Skript wird, würde ich alles in eine Datei packen.

Was dich speziell interessieren wird:
Ob eine Datei vorhanden ist, prüft du mit

if [ -f "dateiname" ]; then ... fi
Und den Exitcode des Prozesses steht direkt nach dem Prozessablauf in der Variablen $?.

jeebee
21-09-2007, 15:30
zu 1: zb mit
for i in $(ls *.txt)
do
mv $i /pfad/zum/neuen/verzeichnis/
done
kannst du alle *.txt im aktuellen Verzeichnis nach /pfad/zum/neuen/verzeichnis verschieben.

peschmae
21-09-2007, 16:02
@jeebee: Und wozu genau machst du nicht einfach ein
mv *.txt /pfad/zum/neuen/verzeichnis/

Quasi frei nach "wieso einfach wenns auch kompliziert geht?" ;)

MfG Peschmä

jeebee
21-09-2007, 16:48
naja, stimmt, hab irgendwie gedacht, das gehe so nicht (war etwas anderes wo ich mal mmv gebraucht habe, was ich auch mit einem for hätte lösen können).

fs111
22-09-2007, 11:33
@jeebee: Und wozu genau machst du nicht einfach ein
mv *.txt /pfad/zum/neuen/verzeichnis/

Quasi frei nach "wieso einfach wenns auch kompliziert geht?" ;)

MfG Peschmä

Bei sehr vielen Dateien kann das die maximale Größe der Kommandozeile sprengen, deswegen ist die Schleife sicherer.

fs111

peschmae
22-09-2007, 13:19
Bei sehr vielen Dateien kann das die maximale Größe der Kommandozeile sprengen, deswegen ist die Schleife sicherer.


Also erstens muss die Dateizahl dann schon recht gross sein. Recht sehr gross genauer gesagt.

Zweitens kriegst du sicher ne Fehlermeldung.

Drittens musst du dann schon ziemlich genau zirkeln, damit ein "mv *.txt /zielpfad" nicht geht, ein "ls *.txt" hingegen schon :p

Schummeln und einen unendlich langen Zielpfad eingeben (/etc/../etc/... etc) gilt nicht!

MfG Peschmä

P.S. und viertens: ich behaupte ich spare durchs Verwenden von mv Anstelle von Schleifen mehr Zeit ein, als ich durchs schreiben solcher Beiträge verschwende :D

BLUESCREEN3D
22-09-2007, 13:47
Drittens musst du dann schon ziemlich genau zirkeln, damit ein "mv *.txt /zielpfad" nicht geht, ein "ls *.txt" hingegen schon :p
Natürlich, das ls ist da ja auch quatsch. Richtig wäre es so:

for i in *.txt
Damit hat man auch keine Probleme mit Dateinamen, die Leerzeichen enthalten.

rais
22-09-2007, 15:38
Moin moin,
öhhmm, wollte der OP nicht Dateien kopieren?

@gerrie1978ch: vielleicht wolltest Du ja so etwas:


cp /Aus/einem/Verzeichnis/*.txt /ein/anderes/Verzeichnis && cp ...
?
MfG,

peschmae
22-09-2007, 16:54
Natürlich, das ls ist da ja auch quatsch. Richtig wäre es so:

for i in *.txt
Damit hat man auch keine Probleme mit Dateinamen, die Leerzeichen enthalten.

Pssst :rolleyes:

MfG Peschmä

gerrie1978ch
25-09-2007, 11:10
Hallo zusammen,

erst einmal vielen Dank für Eure Antworten.

Ja, die *.txt-Dateien will ich ganz einfach nur kopieren, und es sind nicht seeehr viele Dateien. Ein cp solltea eigentlich schon reichen.

Kam bisher noch nicht dazu, mich um das Script zu kümmern, werde jetzt aber mal dran setzen, und Euch auf dem Laufenden halten :rolleyes:

Kennt eigentlich jemand ein gutes Script-Repository oder sowas?

Danke,

Gerrie

gerrie1978ch
25-09-2007, 15:07
Hey Leute,

ich hab alles hinbekommen, vielen Dank. Ist sicher nicht das schönste Script, aber es macht seinen Dienst, Kosmetik kommst später.


Danke,

Gerrie