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")
$ rm -v !("filename1"|"filename2")
$ rm -i !(*.zip)
$ rm -v !(*.zip|*.odt)
$ shopt -u extglob
$ 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] {}
$ find . -type f -not -name '*.gz' -delete
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
$ rm -v *
$ unset GLOBIGNORE
使用 bash 变量 GLOBIGNORE 删除文件
注:为了理解上面的命令行采用的标识的意思,请参考我们在每一个插图中使用的命令对应的 man 手册。