Heim > Artikel > Backend-Entwicklung > 3 Möglichkeiten, bestimmte Dateien in einem Verzeichnis mithilfe der Bash-Shell zu löschen
Ich bin ein neuer Linux-Benutzer. Jetzt muss ich die Dateien in einem Download-Verzeichnis bereinigen. Eigentlich möchte ich nur alle Dateien im Ordner ~/Download/ löschen, mit Ausnahme der Dateien in den folgenden Formaten:
1.*.iso – Alle ISO-Formatdateien.
2.*.zip – Alle Dateien im ZIP-Format.
Wie lösche ich bestimmte Dateien in einer Bash-Shell auf einem Linux-, OS X- oder Unix-ähnlichen System?
Bash-Shell unterstützt Rich-File-Pattern-Matching-Zeichen wie:
1.* – stimmt mit allen Dateien überein.
2.? - Entspricht einem einzelnen Buchstaben in einem Dateinamen.
3.[...] – Entspricht jedem Buchstaben in der umschließenden Klammer.
Strategie Nr. 1: Lernen Sie die erweiterten Mustervergleichszeichen kennen
Hier müssen Sie den integrierten shopt-Befehl des Systems verwenden, um die extglob-Option in der Shell zu aktivieren, und dann können Sie die erweiterte Option verwenden Mustervergleichszeichen, diese Mustervergleicher sind wie folgt:
1.? (Musterliste) – stimmt mit dem angegebenen Muster null oder einmal überein.
2.*(Musterliste) – Entspricht dem angegebenen Muster null oder mehrmals.
3.+(Musterliste) – Entspricht dem angegebenen Muster mindestens einmal.
4.@(Musterliste) – Passen Sie das angegebene Muster einmal an.
5.!(Musterliste) – stimmt nicht mit dem angegebenen Muster überein.
Eine Musterliste besteht aus einem oder mehreren Mustern (Dateinamen), die durch | getrennt sind.
Zuerst die Option extgolb aktivieren:
shopt -s extglob
Alle Dateien außer .zip- und .iso-Dateien in Bash löschen
Das Syntaxformat des rm-Befehls ist:
## 仅保留 file1 文件 ## rm !(file1) ## 仅保留 file1 和 file2 文件## rm !(file1|file2) ## 仅保留 zip 文件 ## rm !(*.zip) ## 仅保留 zip 和 iso 文件 ## rm !(*.zip|*.iso) ## 你也可以使用完整的目录 ## rm /Users/vivek/!(*.zip|*.iso|*.mp3) ## 也可以传递参数 ## rm [选项] !(*.zip|*.iso) rm -v !(*.zip|*.iso) rm -f !(*.zip|*.iso) rm -v -i !(*.php)
Strategie #2: Verwenden Sie die GLOBIGNORE-Variable von Bash, um alle Dateien außer der angegebenen Datei zu löschen
Auszug aus der Bash(1)-Manpage:
Dies ist ein durch Doppelpunkte getrenntes Muster Eine Liste, die eine Reihe von Dateien definiert, die bei der Pfaderweiterung ignoriert werden sollen. Wenn eine Datei, die mit einem Pfaderweiterungsmuster übereinstimmt, auch mit einem Muster in GLOBIGNORE übereinstimmt, wird sie aus der Trefferliste entfernt.
Um alle Dateien zu löschen und nur ZIP- und ISO-Dateien zu behalten, stellen Sie GLOBIGNORE wie folgt ein:
## 只在 BASH 中可行 ## cd ~/Downloads/ GLOBIGNORE=*.zip:*.iso rm -v * unset GLOBIGNORE
Strategie Nr. 3: Verwenden Sie den Befehl „Suchen“, um alle anderen Dateien zu löschen und nur ZIP- und ISO-Dateien zu behalten Dateien
Wenn Sie tcsh/csh/sh/ksh oder andere Shells verwenden, können Sie versuchen, Dateien mit der folgenden Suchbefehlssyntax auf Unix-ähnlichen Systemen zu löschen:
find /dir/ -type f -not -name '匹配模式' -delete
oder
## 对于怪异的文件名可以使用 xargs ## find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {} find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {}
Wenn Sie andere Dateien als PHP im Verzeichnis ~/source löschen möchten, geben Sie Folgendes ein:
find ~/sources/ -type f -not -name '*.php' -delete
oder
find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {}
, um nur * zu behalten .zip und * Die Syntax der .iso-Datei lautet wie folgt:
find . -type f -not \( -name '*zip' -or -name '*iso' \) -delete
Weitere Shell-Artikel zum Löschen bestimmter Dateien finden Sie im PHP-Chinesisch Webseite!