Heim  >  Artikel  >  Backend-Entwicklung  >  3 Möglichkeiten, bestimmte Dateien in einem Verzeichnis mithilfe der Bash-Shell zu löschen

3 Möglichkeiten, bestimmte Dateien in einem Verzeichnis mithilfe der Bash-Shell zu löschen

高洛峰
高洛峰Original
2017-01-09 13:24:221871Durchsuche

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!


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