3 Möglichkeiten zum Löschen aller Dateien in einem Verzeichnis mit Ausnahme eines oder wenigen Dateien mit Erweiterungen

3 Möglichkeiten zum Löschen aller Dateien in einem Verzeichnis mit Ausnahme eines oder wenigen Dateien mit Erweiterungen

Manchmal befassen Sie sich in eine Situation, in der Sie alle Dateien in einem Verzeichnis löschen oder einfach ein Verzeichnis aufräumen müssen, indem Sie alle Dateien mit Ausnahme eines bestimmten Typs entfernen (endet mit einer bestimmten Erweiterung).

In diesem Artikel zeigen wir Ihnen, wie Sie Dateien in einem Verzeichnis außer bestimmten Dateierweiterungen oder -Typen verwenden rm, finden Und Globignore Befehle.

Bevor wir uns weiter bewegen, beginnen wir, wenn wir uns kurz ein wichtiges Konzept unter Linux -Dateiname -Muster -Matching ansehen, das es uns ermöglicht, mit unserem zur Hand zu gehen.

Vorgeschlagene Lesen: Verwenden Sie den Befehl Find, um mehrere Dateinamen/Erweiterungen unter Linux zu durchsuchen

In Linux ist ein Shell -Muster eine Zeichenfolge, die aus den folgenden Sonderzeichen besteht, die als als bezeichnet werden Wildcards oder Metacharaccters:

  1. * - entspricht null oder mehr Zeichen
  2. ? - entspricht jedem einzelnen Charakter
  3. [SEQ] - entspricht jedem Charakter in seq
  4. [!SEQ] - entspricht einem Charakter, der nicht in seq

Es gibt drei mögliche Methoden, die wir hier untersuchen werden. Dazu gehören:

Löschen Sie Dateien mithilfe erweiterter Musteranpassungsoperatoren

Die unterschiedlichen erweiterten Muster -Matching -Operatoren sind unten aufgeführt, wo Musterliste ist eine Liste mit einem oder mehreren Dateinamen, die mit dem getrennt sind | Charakter:

  1. *(Musterliste) - entspricht null oder mehr Vorkommen der angegebenen Muster
  2. ?(Musterliste) - entspricht Null oder einem Auftreten der angegebenen Muster
  3. +(Musterliste) - entspricht einem oder mehreren Vorkommen der angegebenen Muster
  4. @(Musterliste) - entspricht einem der angegebenen Muster
  5. !(Musterliste) - übereinstimmt alles außer einem der angegebenen Muster

Um sie zu verwenden, aktivieren Sie die extglob Shell -Option wie folgt:

# Shopt -s extglob 

1. Um alle Dateien in einem Verzeichnis außer Dateiname zu löschen, geben Sie den folgenden Befehl ein:

$ rm -v !("Dateinamen") 
Löschen Sie alle Dateien mit Ausnahme einer Datei unter Linux

2. So löschen Sie alle Dateien mit Ausnahme von Dateiname1 Und Dateiname2:

$ rm -v !("Dateiname1" | "Dateiname2") 
Löschen Sie alle Dateien außer wenigen Dateien unter Linux

3. Das folgende Beispiel zeigt, wie Sie alle anderen Dateien als alle entfernen .Reißverschluss Dateien interaktiv:

$ rm -i !(*.Reißverschluss) 
Löschen Sie alle Dateien mit Ausnahme von ZIP -Dateien unter Linux

4. Als nächstes können Sie alle Dateien in einem Verzeichnis abgesehen von allen löschen .Reißverschluss Und .ODT Dateien wie folgt, während angezeigt wird, was getan wird:

$ rm -v !(*.ZIP |*.ODT) 
Löschen Sie alle Dateien mit Ausnahme bestimmter Dateierweiterungen

Sobald Sie alle erforderlichen Befehle haben, schalten Sie das aus extglob Shell -Option wie so:

$ Shopt -u extglob 

Löschen Sie Dateien mit dem Befehl Linux Finden Sie den Befehl

Nach dieser Methode können wir den Befehl Find ausschließlich mit geeigneten Optionen oder in Verbindung mit verwenden Xargs Befehl durch Verwendung einer Pipeline wie in den folgenden Formularen:

$ find / verzeichnis / -typ f -not -name 'muster' -delete $ find / Verzeichnis / -typ f -not -name 'Muster' -print0 | xargs -0 -i  rm  $ find / directory / -type f -not -name 'muster' -print0 | xargs -0 -i  rm [Optionen]  

5. Der folgende Befehl löscht alle Dateien abgesehen von .gz Dateien im aktuellen Verzeichnis:

$ find . -Typ f -not -name '*.gz'-delete 
Befehl Finden - Entfernen Sie alle Dateien außer .GZ -Dateien

6. Verwendung einer Pipeline Und Xargs, Sie können den obigen Fall wie folgt ändern:

$ find . -Typ f -not -name '*gz' -print0 | xargs -0 -i  rm -v  
Entfernen Sie Dateien mit den Befehlen mit Find- und Xargs

7. Sehen wir uns ein zusätzliches Beispiel an .gz, .ODT, Und .JPG Dateien im aktuellen Verzeichnis:

$ find . -Typ f -not \ ( -name '*gz' -or -name '*odt' -or -name '*.JPG '\) -Delete 
Entfernen Sie alle Dateien mit Ausnahme von Dateierweiterungen

Löschen Sie Dateien mithilfe der Bash Globignore -Variablen

Dieser letzte Ansatz funktioniert jedoch nur mit Bash. Hier das Globignore Variable speichert eine dicker getrennte Musterliste (Dateinamen), die durch die Pathname-Expansion ignoriert werden soll.

Vorgeschlagene Lesen: Nützliche 12 praktische Beispiele zum GREP -Befehl unter Linux

Um diese Methode anzuwenden, gehen Sie in das Verzeichnis, das Sie aufräumen möchten Globignore Variable wie folgt:

$ cd test $ globignore =*.ODT:*.ISO:*.txt 

In diesem Fall alle anderen Dateien als .ODT, .ISO, Und .txt Dateien mit dem aktuellen Verzeichnis entfernt werden.

Führen Sie nun den Befehl aus, um das Verzeichnis aufzuräumen:

$ rm -v * 

Danach ausschalten Globignore Variable:

$ unbegrenzter Globignore 
Löschen Sie Dateien mithilfe der Bash Globignore -Variablen

Notiz: Um die Bedeutung der in den obigen Befehlen verwendeten Flags zu verstehen.

Das ist alles! Wenn Sie andere Befehlszeilen -Techniken für denselben Zweck im Auge haben, vergessen Sie nicht, uns über unseren Feedback -Abschnitt unten mit uns zu teilen.