• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung

Skript zum Löschen von Ordnerinhalten

data

Gloster
Registriert
21.06.09
Beiträge
63
Hallo Forum,
ich habe mit dem Automator folgendes Skript erstellt (Shell-Skript ausführen) und als .app gespeichert:
Code:
cd /Users/xxx/Videoschnitt/ungeschnitten
rm *
cd /Users/xxx/Videoschnitt/cut
rm *
soweit läuft das auch, aber falls in einem oder beiden Ordner keine Dateien sind gibt es eine Fehlermeldung (Bei der Aktion „Shell-Skript ausführen“ ist ein Fehler aufgetreten).
Ist es möglich eine Art wenn dann Bedingung einzufügen z. B. wenn Order leer dann beenden, wenn nicht Skript für Ordner ausführen? Wenn ja, wie muss so ein Skript dann aussehen?
 

data

Gloster
Registriert
21.06.09
Beiträge
63
Vielen Dank für die schnelle Antwort, das war ja einfach :D
 

Wuchtbrumme

Golden Noble
Registriert
03.05.10
Beiträge
21.996
nur zur Klarstellung: -f heißt einfach nur "force", d.h. lösche alles ohne Rückfrage, garantiert.

Für Deinen oben geschilderten Fall erreicht man genau das, was Du wolltest, eine Fehlerbehandlung sieht aber dennoch irgendwie anders aus.
 

data

Gloster
Registriert
21.06.09
Beiträge
63
das mit dem Parameter ist mir klar, ich hatte einfach nicht daran gedacht, dass force ausreicht.
Was meinst Du mit
eine Fehlerbehandlung sieht aber dennoch irgendwie anders aus.
?
Die von mir beschriebene Fehlermeldung kommt so nur vor, wenn man die .app ausführt, im Terminal heiß es : rm: *: No such file or directory
 

Wuchtbrumme

Golden Noble
Registriert
03.05.10
Beiträge
21.996
Force heißt nicht, gucke, ob Dateien da sind und lösche die, ansonsten tu nichts, sondern das heißt, nimm den größten Hammer und hau extra hart drauf. Hoffe, das ist jetzt klarer. Vorher hatte ich noch den standardmäßigen Schmäh über rm und dessen Gefährlichkeit (insbesondere bei rekursiver Verwendung und dem Hinzufügen von Leerzeichen) geschrieben, dann wäre der Kontext eindeutig, aber sowas Gefährliches brauche ich ja hier nicht schreiben - wer will, kann googeln, wer das nicht tut, kommt gar nicht erst auf blöde Gedanken.

Eine Fehlerbehandlung würde halt erst gucken, existieren Einträge im Verzeichnis außer "." und "..", wenn ja, dann wende rm an, wenn nicht, dann nicht.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Das heisst hier nicht nur "force", sondern auch "failsafe".
Fehlgeschlagene Aktionen werden einfach ignoriert, statt den Fehler brav zu melden.
 

data

Gloster
Registriert
21.06.09
Beiträge
63
@Wuchtbrumme : Wenn Du eine bessere Idee hast wie ich mit einem Doppelklick den Inhalt von Ordnern löschen kann ohne Unterordner zu löschen, dann immer raus damit :)
 

messeb

Braeburn
Registriert
12.05.13
Beiträge
43
Mit dem Löschen sollte man natürlich immer vorsichtig sein, am sichersten wäre das dann wohl noch die Dateien nicht zu löschen, sondern einfach in irgendeinen anderen Ordner als Backup zu verschieben. Siehe dazu
Code:
mv
und vorher einen eigenen Ordner erstellen
Code:
_jetzt=$(date +%Y-%m-%d_%H-%M)
$(mkdir $_jetzt)


Und ob man jetzt
Code:
rm
oder
Code:
rm -f
nimmt is ja erst ein Mal kein großen Unterschied, außer dass man etwaige Fehler nicht zur Gesicht bekommt.
Hat man beispielsweise nicht die Rechte zum Löschen, passiert gar nichts (schlimmes), außer das man als Nutzer denkt man hätte die Dateien gelöscht.

Ich habe mal eine modifizierte Variante erstellt, wo nur die Dateien aufgelistet werden, die dem aktuellen Nutzer gehören und dann ggf. gelöscht werden:
Code:
#!/bin/bash
_benutzer=$(id -u -n)
_dateien=($(find . -type f -user $_benutzer))
_anzahl=${#_dateien[@]}

if [[ $_anzahl -gt 0 ]]; then
    rm ${_dateien[@]}
fi

Wie gesagt, es geht auch immer noch ein wenig komplizierter, aber ob man dann in jeden Anwendungsfall genau weiß was passiert, ist die andere Frage.
 
  • Like
Reaktionen: Wuchtbrumme