Ja, das wollte ich eigentlich auch schreiben. Der Befehl rm löscht immer das letzte Element im angegebenen Pfad. Der Stern wird durch das Globbing der Sehll durch die vorkommenden Dateien im Pfad ersetzt.
Wenn du also die Datei 1.txt 2.txt 3.txt und das Unterverzeichnis abc in /zu/löschendes/verzeichnis/ hast, wird durch den Aufruf von
|
Source code
|
1
|
rm -r /zu/löschendes/verzeichnis/*
|
der Stern mit dem gesammten Pfad durch die Shell ersetzt. Der Befehl wird dann wie folgt aufgerufen:
|
Source code
|
1
|
rm -r /zu/löschendes/verzeichnis/1.txt /zu/löschendes/verzeichnis/2.txt /zu/löschendes/verzeichnis/3.txt /zu/löschendes/verzeichnis/abc
|
Bei zuvielen Dateien kann es aber zu Problemen kommen. Dann sind die Argumente zu lang und/oder zuviele Argumente vorhanden. Das ist mir damals beim erstellen des FastDL-Scripts aufgefallen. Weil gerade dort sehr viele Dateien vorhanden sind, erreicht man das Limit sehr schnell.
PS: Den Weg über cd und der Überprüfung finde ich recht umständlich. Wenn du es trotzdem kompakt willst, könntest du folgendes Verwenden:
|
Source code
|
1
|
[[ -d /xy/zulöschendesverzeichnis ]] && rm -r /xy/zulöschendesverzeichnis
|
Die Variante für die Datei brauchst du nicht. In dem Fall solltest du dir angewöhnen immer mit absoluten Pfaden zu arbeiten, auch wenn es umständlicher aussieht. Entweder rm kann die Datei löschen oder nicht. Wenn du den Optionsschalter -r weglässt, wird auch nichts rekursiv gelöscht. So kann auch nicht versehentlich ein Verzeichnis gelöscht werden, wenn es so wie die eigentlich zu löschende Datei heißt, selbst wenn dieses leer ist.
|
Source code
|
1
|
rm: Entfernen von „test123“ nicht möglich: Ist ein Verzeichnis
|