ubuntuusers.de

Bei Skript Fehler mit && Skript fortsetzen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

berndd

Anmeldungsdatum:
24. März 2007

Beiträge: 944

Hallo,

möchte in einem Skript mehrere Dinge hintereinander tun . Das mache ich mit &&. Wenn aber eine Zeile einen Fehler enthält, dann bricht das Skript ab,

Mein Skript:

find /home/bernd/down/azureusfertig/AA/ -name "*.rar" -exec unrar x -ppasswort -o+ "{}" /home/bernd/down/azureusfertig/AA/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.avi" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mpg" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mp4" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.wmv" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mov" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mkv" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name *.rar -delete 

Das Skript sollte einfach in der Reihenfolge fortfahren, auch wenn es z.B. keine Avi Dateien zu verschieben gibt.

Wäre sehr nett wenn mir zu helfen wäre 😀

Gruß

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

berndd schrieb:

Hallo,

möchte in einem Skript mehrere Dinge hintereinander tun. Das mache ich mit &&.

Also was man hintereinander, bessergesagt untereinander schreibt, man ein Script von sich aus nacheinander.

Äquivalent sind:

foo; bar; baz; 

und

foo
bar
baz

Mit && kannst Du ein Kommando konditional machen - das spätere wird nur ausgeführt, wenn das vorhergehende erfolgreich war. Was erfolgreich bedeutet hängt vom jeweiligen Programm ab.

Was unter erfolgreich zu verstehen ist, darüber kann man geteilter Meinung sein. Eine Suche könnte man auch als erfolgreich bezeichnen, wenn sie nicht unterbrochen wurde, und zuverlässig festgestellt hat, daß es keine avi-Datei gibt. Aber bitte - das ist nicht unser Problem.

Mein Skript:

find /home/bernd/down/azureusfertig/AA/ -name "*.rar" -exec unrar x -ppasswort -o+ "{}" /home/bernd/down/azureusfertig/AA/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.avi" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mpg" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
find /home/bernd/down/azureusfertig/AA/ -name "*.mp4" -exec mv "{}" /home/bernd/down/azureus/A/ ";" &&
...

Nimm die && raus, und Du hast ein funktionierendes Skript. Verkette stattdessen die Dateimuster:

find ~/down/azureusfertig/AA/ -name "*.mkv" -or -name "*wmv" -or -name "mp4" -exec mv {} ~/down/azureus/A ";"

find /home/bernd/down/azureusfertig/AA/ -name *.rar -delete

Ui - da ist Dir dann doch ein Fehler gelungen - "*.rar" muß es heißen, da sonst das Muster von der Schell ausgewertet wird, und durch eine Auflistung alle rar-Dateien im aktuellen Verzeichnis ersetzt wird. Dagegen muß {} für find nicht maskiert werden.

uname

Anmeldungsdatum:
28. März 2007

Beiträge: 6030

Wohnort: 127.0.0.1

Nur eine kurze Erklärung zu "&&". Konditional ist schon das richtige Stichwort. Es ist so, dass es eine Und-Verknüpfung ist. Die Aussage kann nur dann war werden, wenn alle Bedingungen auch eintreffen. Sobald die erste Bedingung nicht erfüllt ist und falsch wird macht es für das Programm keinen Sinn mehr weiter zu arbeiten, da die Aussage auf jeden Fall falsch bleibt:

wahr   && wahr   && wahr = wahr
wahr   && falsch         = falsch
falsch                   = falsch

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Und nochmal anders gesagt: Alles, was einen Exitstatus ungleich Null zurückgibt, gilt als fehlerhaft beendet.

berndd

(Themenstarter)

Anmeldungsdatum:
24. März 2007

Beiträge: 944

Hallo,

danke für die Tipps.

Die Reihenfolge des Skripts muss aber unbedingt in dieser Reihenfolge ablaufen, denn wenn die rar-Dateien erst gelöscht sind, dann ist es auch nicht mehr möglich sie zu entpacken.

habe ein wenig mit dem Skript experimentiert:

find ~/down/azureusfertig/AA/ -name "*.mkv" -or -name "*.wmv" -or -name "*.mp4" -or -name "*.avi" -or -name "*.mpg" -or -name "*.mov" -exec mv {} ~/down/azureus/A ";"

das funktioniert aber nicht. Wenn ich die Zeile ab dem exec lösche,

find ~/down/azureusfertig/AA/ -name "*.mkv" -or -name "*.wmv" -or -name "*.mp4" -or -name "*.avi" -or -name "*.mpg" -or -name "*.mov"

(zu Testzwecken) werden mir zwar die Dateien angezeigt, diese werden aber mit der vollständigen Zeile nicht verschoben.

Für weitere Tipps danke ich im Voraus.

Gruß

Antworten |