Heim  >  Artikel  >  php教程  >  Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

高洛峰
高洛峰Original
2016-11-16 09:35:491563Durchsuche

Manchmal kann es vorkommen, dass Sie alle Dateien in einem Verzeichnis löschen oder einfach ein Verzeichnis bereinigen müssen, indem Sie Dateien mit Ausnahme einiger bestimmter Typen (die mit einer bestimmten Erweiterung enden) löschen. Inhaltsverzeichnis.

In diesem Artikel zeigen wir Ihnen, wie Sie mit den Befehlen rm, find und globignore Dateien in einem Verzeichnis außer der angegebenen Dateierweiterung oder dem angegebenen Dateityp löschen.

Bevor wir fortfahren, beginnen wir mit einem kurzen Blick auf ein wichtiges Konzept in Linux – den Dateinamen-Mustervergleich, der es uns ermöglicht, das vorliegende Problem zu lösen.

Unter Linux ist ein Shell-Muster eine Zeichenfolge, die die folgenden Sonderzeichen, sogenannte Platzhalter oder Metazeichen, enthält:

* – entspricht 0 oder mehr Zeichen

– entspricht einem beliebigen einzelnen Zeichen Zeichen

[sequence] – entspricht jedem Zeichen in der Sequenz

[!sequence] – entspricht jedem Zeichen, das nicht in der Sequenz

uns Hier werden drei mögliche Ansätze untersucht: einschließlich:

Löschen von Dateien mit erweiterten Mustervergleichsoperatoren

Die verschiedenen erweiterten Mustervergleichsoperatoren sind unten aufgeführt. Diese Musterlisten sind eine Liste mit einem oder mehreren Dateinamen:

* (Musterliste) – entspricht 0 oder mehr Vorkommen des angegebenen Musters

? (Musterliste) – entspricht 0 oder mehr Vorkommen des angegebenen Musters 1 Vorkommen des angegebenen Musters

@(Musterliste) – entspricht einem oder mehreren Vorkommen des angegebenen Musters

!(Musterliste) – entspricht allem außer einem angegebenen Muster

Um sie verwenden zu können, benötigen Sie Um die Extglob-Shell-Option wie folgt zu aktivieren:

# shopt -s extglob

1. Geben Sie den folgenden Befehl ein, um alle Dateien in einem Verzeichnis außer Dateiname

$ rm -v !("filename")

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Alle Dateien außer einer Datei unter Linux löschen

2. Alle Dateien außer Dateiname1 und Dateiname2 löschen

$ rm -v !("filename1"|"filename2")

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Alle Dateien außer einigen Dateien löschen in Linux

3. Das folgende Beispiel zeigt, wie alle Dateien außer .zip im interaktiven Modus gelöscht werden

$ rm -i !(*.zip)

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Alle Dateien außer Zip-Dateien unter Linux löschen

4. Als nächstes können Sie alle Dateien in einem Verzeichnis löschen, mit Ausnahme aller Dateien von .zip- und .odt-Dateien, und beim Löschen die zu löschende Datei anzeigen:

$ rm -v !(*.zip|*.odt)

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Alle Dateien außer der angegebenen Dateierweiterung löschen

Sobald Sie alle erforderlichen Befehle ausgeführt haben, können Sie die extglob-Shell-Option auch wie folgt deaktivieren.

$ shopt -u extglob
Verwenden Sie unter Linux den Befehl „find“, um Dateien zu löschen.

Bei dieser Methode können wir einfach die entsprechenden Optionen des Befehls „find“ verwenden oder Pipes mit dem Befehl „xargs“ verwenden, wie unten gezeigt :

$ find /directory/ -type f -not -name 'PATTERN' -delete 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
5. Der folgende Befehl löscht alle Dateien außer .gz im aktuellen Verzeichnis

$ find . -type f -not -name '*.gz' -delete

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Befehl „Alle löschen“. Dateien außer .gz

6. Mit Pipes und xargs können Sie das obige Beispiel wie folgt ändern:

$ find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Verwenden Sie die Befehle find und xargs, um Dateien löschen

7. Schauen wir uns ein weiteres Beispiel an. Die folgende Befehlszeile löscht alle Dateien außer .gz, .odt und .jpg im aktuellen Verzeichnis:

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

Löschen Sie alle Dateien außer der angegebenen Erweiterungsdatei

Löschen Sie die Datei über die GLOBIGNORE-Variable in Bash

Die letzte Methode funktioniert jedoch nur mit Bash. Die GLOBIGNORE-Variable speichert eine durch Doppelpunkte getrennte Liste ignorierter Muster (oder Dateinamen) für die Pfadnamenerweiterungsfunktion.

Um diese Methode zu verwenden, wechseln Sie in das Verzeichnis, in dem Sie die Datei löschen möchten, und legen Sie die GLOBIGNORE-Variable wie folgt fest:

$ cd test 
$ GLOBIGNORE=*.odt:*.iso:*.txt
In diesem Fall zusätzlich zu .odt, . iso und . Alle Dateien außer txt werden aus dem aktuellen Verzeichnis gelöscht.

Führen Sie nun den folgenden Befehl aus, um dieses Verzeichnis zu leeren:

$ rm -v *
Schließen Sie danach die GLOBIGNORE-Variable:

$ unset GLOBIGNORE

Drei Methoden zum Löschen aller Dateien außer einigen Typen in einem Verzeichnis unter Linux

使用 bash 变量 GLOBIGNORE 删除文件

注:为了理解上面的命令行采用的标识的意思,请参考我们在每一个插图中使用的命令对应的 man 手册。



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn