ubuntuusers.de

Verschiedene Dateien ohne Fehlermeldung verschieben

Status: Gelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

piXelicious

Anmeldungsdatum:
20. Dezember 2009

Beiträge: Zähle...

Hallo,

ich habe ein kleines Skript zum Verwalten beliebiger einkommender Dateien geschrieben. In erster Linie geht es dabei um das Verschieben aufgrund bestimmter Abkürzungen im Dateinamen in ein bestimmtes Verzeichnis.

Das sieht dann zum Beispiel so aus:

1
2
3
4
5
Dateinamen, beispielsweise: abc-BELIEBIGER.TEXT.pdf, cba-BELIEBIGER.TEXT.pdf.
#!/bin/bash

mv abc-*.pdf /home/pixel/docs/abc/
mv cba-*.pdf /home/pixel/docs/cba/

Das klappt auch soweit. Allerdings kommt es des Öfteren vor, dass in dem Verzeichnis keine Datei liegt, die auf "abc-*.pdf" zutrifft, sondern eben nur für andere Dateien. Für jedes nichtvorhandene Kürzel erhalte ich eine Fehlermeldung:

1
mv: Aufruf von stat für »abc-*.pdf“ nicht möglich: Datei oder Verzeichnis nicht gefunden

Das ist auch verständlich, jedoch verdrängen diese Fehlermeldungen andere Ausgaben. Kann ich diese Meldung irgendwie unterdrücken? Die Hilfe hat nichts zutreffendes ausgespuckt. Auch der Versuch "> /dev/null" anzuhängen brachte nicht den gewünschten Erfolg.

Oder gibt es noch eine bessere Möglichkeit den oben beschriebenen Sachverhalt umzusetzen, bei dem keine dieser Meldungen auftreten?

Vielen Dank für die Hilfe im Voraus.

Liebe Grüße

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das ist eine (voreingestellte) Eigenheit der Filename Expansion der Shell:

Wenn das angegebene Muster auf nichts passt, dann wird der Ausdruck einfach so genommen wie er ist.
Und wenn es einen Dateinamen "abc-*.pdf" (mit dem Stern drin) nicht gibt, meldet mv einen Fehler.

Soweit so klar. In diesem Fall könnte man mit einer Shelleinstellung etwas machen, hier mit einer Shell-Option, die diesem Fall einfach nichts zurückgibt: shopt -s nullglob (oder alternativ failglob)
Allerdings würde sich mv dann immer noch über den fehlenden Operanden beschweren.

Deshalb wäre hier die etwas rustikale Lösung am einfachsten, dass man einfach die Fehler-Ausgabe komplett ins Nirvana umleitet:

mv abc-*.pdf /home/pixel/docs/abc/  2> /dev/null

LG,

track

RapaNui

Avatar von RapaNui

Anmeldungsdatum:
16. Juli 2007

Beiträge: 1925

Wohnort: Penco / Chile

Hola

piXelicious schrieb:

Auch der Versuch "> /dev/null" anzuhängen brachte nicht den gewünschten Erfolg.

Dann hast Du es nicht richtig gemacht, schau mal dazu Shell/Umleitungen. Du musst die Fehlermeldungen, also den stderr umleiten.

Vielleicht interessiert Dich auch das:

piXelicious

(Themenstarter)

Anmeldungsdatum:
20. Dezember 2009

Beiträge: 6

Vielen Dank für die schnelle Antwort!

Der Unterschied zwischen "2> /dev/null" und "> /dev/null" war es tatsächlich - immerhin schien meine Idee nicht ganz falsch gewesen zu sein.

Danke nochmals.

Edit:

RapaNui schrieb:

Dann hast Du es nicht richtig gemacht, schau mal dazu Shell/Umleitungen. Du musst die Fehlermeldungen, also den stderr umleiten.

Vielen Dank auch an dich. Der Fehler schien die fehlende "2" gewesen zu sein. Der Seite Shell/Umleitungen zufolge lag das daran, dass der von dir erwähnte "stderr" die Nummer 2 hat.

Antworten |