RM-Befehl

Linux-Konsole: Löschen mit Dateityp-Filter

Wer in einem Verzeichnis alles bis auf Dateien eines bestimmten Dateityps löschen möchte, kann das mit folgendem Trick tun.

Logdateien, temporäre Dateien und nicht mehr benötigte Sicherheitskopien: Oft geht es bei Löschaktionen in einem Verzeichnis darum, alle Dateien bis auf einen bestimmten Dateityp zu löschen. Der übliche Löschbefehl „rm“ hat dafür keine brauchbare Lösung.

Der find-Befehl kann bestimmte Dateiendungen filtern und enthält einen eigenen Löschbefehl über den Parameter „-delete“.
Der find-Befehl kann bestimmte Dateiendungen filtern und enthält einen eigenen Löschbefehl über den Parameter „-delete“.


Platzhalter sind für das Kommando rm generell ein Problem. Muster mit Platzhaltern wie beispielsweise *.tmp werden stattdessen von der Shell interpretiert. Zwar kann der Befehl

rm *.tmp

deshalb alle Dateien im aktuellen Ordner entfernen, die auf „.tmp“ enden, aber das Muster ist nicht umkehrbar, um bestimmte Dateitypen vom Löschen auszunehmen. Besser ist, das flexible Kommando „find“ für Suchmuster und Löschaktionen einzuspannen. Folgendes Kommando hilft, um mit find alle Dateien bis auf jene mit der Endung „.txt“ zu löschen:

find ./ -type f ! -iname "*.txt" -delete

Das vorangestellte Ausrufezeichen kehrt den nachfolgenden Suchbegriff um, der hier über den Dateinamensteil „*.txt“ angegeben ist.

Die Auswahl mehrerer Dateimasken ist ebenfalls möglich, macht die Syntax aber etwas komplexer: Mit dem Befehl

find ./ -type f ! \( -iname "*.ht ml" -o -iname "*.css" \) -delete

löschen Sie beispielsweise alles im gegenwärtigen Verzeichnis, ausgenommen die Dateien mit den Endungen „.html und „.css“.

(PC-Welt/ad)