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

Bash-Script Fehlerausgabe

Mojo1987

Newbie
Hallo,

ich lasse Teile meines Systems von einem Script bereinigen das ich die Arbeit nicht immer damit hab. In dem Fall bereinigt er einfach ein Verzeichnis indem sich mit der Zeit ne Menge jpg. Dateien ansammelt.

Hier das Script:

Code:
#!/bin/bash

cd /pfad/zum/ordner/
echo "Wechsel nach tmpsec"
rm seca*.jpg
echo "Dateien seca*.jpg gelöscht"
rm secb*.jpg
echo "Dateien secb*.jpg gelöscht"
rm secc*.jpg
echo "Dateien secc*.jpg gelöscht"
rm secd*.jpg
echo "Dateien secd*.jpg gelöscht"
rm sece*.jpg
echo "Dateien sece*.jpg gelöscht"
rm secf*.jpg
echo "Dateien secf*.jpg gelöscht"
rm sec1*.jpg
echo "Dateien sec1*.jpg gelöscht"
rm sec2*.jpg
echo "Dateien sec2*.jpg gelöscht"
rm sec3*.jpg
echo "Dateien sec3*.jpg gelöscht"
rm sec4*.jpg
echo "Dateien sec4*.jpg gelöscht"
rm sec5*.jpg
echo "Dateien sec5*.jpg gelöscht"
rm sec6*.jpg
echo "Dateien sec6*.jpg gelöscht"
rm sec7*.jpg
echo "Dateien sec7*.jpg gelöscht"
rm sec8*.jpg
echo "Dateien sec8*.jpg gelöscht"
rm sec9*.jpg
echo "Dateien sec9*.jpg gelöscht"
rm sec0*.jpg
echo "Dateien sec0*.jpg gelöscht"
rm *.*
echo "Ordner endbereinigt"

Funktioniert super. Aber hin und wieder ist es eben so das manche rm Bedingungen nicht erfüllt werden weshalb dann folgendes ausgegeben wird:

Code:
rm: cannot remove `*.*': No such file or directory
Ordner endbereinigt

An sich auch richtig, im Idealfall ist der Ordner dann leer. Aber ich find die Meldung sieht hässlich aus. Daher meine Frage, kann ich die Fehlermeldung beeinflussen, das da anstatt der des rm bei Fehler z.B. "Ordner bereits leer" steht?

Gruß
Mojo1987
 
Aua! - Sorry, aber bei dem "Script" bekomme ich Bauchschmerzen.

1. Bitte vollständige Pfade im Scripten benutzen und
Code:
cd /foo/bar
vermeiden.

2. Nicht wild irgendwelche Dateien auf Verdacht löschen.
Entweder testen, ob die Dateien existieren ... oder (besser) alle Dateien suchen, die auf einen Ausdruck passen.

3. Wozu überhaupt das
Code:
rm *.*
Damit löscht du doch alle Dateien mit Punkt im Dateinamen?!
Also sind die ersten Befehle sowieso überflüssig?! :?

Mal als Ansatz (ungetestet):
Code:
#!/bin/sh

find /pfad/zum/ordner -name "sec[a-f,0-9]*.jpg" -o name "*.*" | while read file;
  do
    echo "Lösche Datei: $file";
    rm "$file";
done;
 

abgdf

Guru
Ähh, ein Verzeichnis kannst Du auch mit

Code:
rm -r Verzeichnis

ganz löschen und dann mit

Code:
mkdir Verzeichnis

wieder erstellen. "*.*" ist eher Windows-Slang.

Ob "endbereinigt" nun so politisch korrekt ist, will ich mal dahingestellt sein lassen.

Gruß

Edit: Skriptmeister b3ll3roph0n war wieder schneller :)
 
OP
M

Mojo1987

Newbie
b3ll3roph0n schrieb:
2. Nicht wild irgendwelche Dateien auf Verdacht löschen.
Entweder testen, ob die Dateien existieren ... oder (besser) alle Dateien suchen, die auf einen Ausdruck passen.
Das ist absicht, eigentlich muss der Ordner geleert werden, da sich da aber gut und gerne 100MB (mehrere tausend Dateien) in wenigen Stunden ansammeln können kommt rm nicht mit der großen Datenmenge zurecht, deshalb so "Stückchenweise".

b3ll3roph0n schrieb:
3. Wozu überhaupt das
Code:
rm *.*
Damit löscht du doch alle Dateien mit Punkt im Dateinamen?!
Also sind die ersten Befehle sowieso überflüssig?! :?

Wie gesagt, das Problem der Datenmenge. Damit lösche ich am Ende nur die restlich verbliebenen Daten.

b3ll3roph0n schrieb:
Mal als Ansatz (ungetestet):
Code:
#!/bin/sh

find /pfad/zum/ordner -name "sec[a-f,0-9]*.jpg" -o name "*.*" | while read file;
  do
    echo "Lösche Datei: $file";
    rm "$file";
done;

Ich werde dein Script gerne mal Testen.
Zu der Idee mim löschen des Ordners, will ich eigentlich vermeiden, weil sonst keine neuen Files abgelegt werden können solange er das macht und ich dann die Anwendung solange deaktivieren muss. Mal abgesehen das dann die Rechte wieder gesetzt werden müssen.

Ansonsten schonmal danke.
 

regexer

Advanced Hacker
Mojo1987 schrieb:
Code:
rm: cannot remove `*.*': No such file or directory
Ordner endbereinigt
rm -f würde auch gehen. Das unterdrückt allerdings auch eventuelle Sicherheitsabfragen bezüglich "write protected"
 
Oben