3 Weeër fir all Dateien an engem Verzeechnes ze läschen ausser een oder e puer Dateien mat Extensiounen


Heiansdo kommt Dir an eng Situatioun wou Dir all Dateien an engem Verzeichnis läschen musst oder einfach e Verzeechnes botzen andeems Dir all Dateien ausser Dateie vun engem bestëmmten Typ ewechhuelt (mat enger bestëmmter Extensioun ophalen).

An dësem Artikel wäerte mir Iech weisen wéi Dir Dateien an engem Verzeichnis läscht, ausser bestëmmte Dateiextensiounen oder Typen mat rm, Find and Globignore Kommandoen.

Ier mer weider réckelen, loosst eis ufänken kuerz op ee wichtegt Konzept am Linux ze kucken - Dateinumm Muster Matching, wat eis et erlaabt eis mat eisem Problem ze këmmeren.

Am Linux ass e Shellmuster e String deen aus de folgende spezielle Charaktere besteet, déi als Wildcards oder Metacharaktere bezeechent ginn:

  1. * – entsprécht null oder méi Zeechen
  2. ? – entsprécht all eenzel Zeechen
  3. [seq] – entsprécht all Charakter an der seq
  4. [!seq] – entsprécht all Charakter net an der seq

Et ginn dräi méiglech Methoden déi mir hei entdecken, an dës enthalen:

Läschen Dateien mat erweiderten Muster passend Betreiber

Déi verschidde verlängert Muster passend Betreiber sinn hei ënnen opgezielt, wou Muster-Lëscht eng Lëscht ass, déi een oder méi Dateinumm enthält, getrennt mat dem | Charakter:

  1. *(Muster-Lëscht) – entsprécht null oder méi Optriede vun de spezifizéierte Mustere
  2. ?(Muster-Lëscht) – entsprécht Null oder engem Optriede vun de spezifizéierte Mustere
  3. +(Muster-Lëscht) - entsprécht een oder méi Optriede vun de spezifizéierte Mustere
  4. @(Muster-Lëscht) – entsprécht engem vun de spezifizéierte Mustere
  5. !(Muster-Lëscht) – entsprécht alles ausser ee vun de gegebene Mustere

Fir se ze benotzen, aktivéiert d'Extglob Shell Optioun wéi follegt:

# shopt -s extglob

1. Fir all Dateien an engem Verzeichnis ze läschen ausser Dateinumm, gitt de Kommando hei ënnen:

$ rm -v !("filename")

2. Fir all Dateie mat Ausnam vu Dateinumm1 an Dateinumm2 ze läschen:

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

3. D'Beispill hei drënner weist wéi Dir all Dateien ausser all .zip Dateien interaktiv läscht:

$ rm -i !(*.zip)

4. Als nächst kënnt Dir all Dateien an engem Verzeichnis ausser all .zip an .odt Dateien wéi follegt läschen, wärend Dir weist wat gemaach gëtt:

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

Wann Dir all déi erfuerderlech Kommandoen hutt, schalt d'Extglob Shell Optioun aus wéi esou:

$ shopt -u extglob

Läschen Dateien Mat Linux Find Command

Ënner dëser Method kënne mir de Find Kommando exklusiv mat passenden Optiounen benotzen oder a Verbindung mam xargs Kommando andeems Dir eng Pipeline benotzt wéi an de Formen hei drënner:

$ 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. De folgende Kommando läscht all Dateien ausser .gz Dateien am aktuellen Verzeichnis:

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

6. Mat enger Pipeline an xargs kënnt Dir de Fall hei uewen änneren wéi follegt:

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

7. Loosst eis en zousätzlecht Beispill kucken, de Kommando hei drënner wëschen all Dateien ausser .gz, .odt an .jpg Dateien aus. am aktuellen Dossier:

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

Läschen Dateien mat Bash GLOBIGNORE Variabel

Dës lescht Approche funktionnéiert awer nëmme mat Bash. Hei späichert d'GLOBIGNORE Variabel eng Colon-getrennt Musterlëscht (Dateiennimm) fir duerch Pathname Expansioun ignoréiert ze ginn.

Fir dës Method ze benotzen, gitt an de Verzeichnis deen Dir wëllt botzen, setzt dann d'GLOBIGNORE Variabel wéi follegt:

$ cd test
$ GLOBIGNORE=*.odt:*.iso:*.txt

An dësem Fall ginn all aner Dateie wéi .odt, .iso an .txt Dateien aus dem aktuellen Verzeichnis geläscht.

Fëllt elo de Kommando aus fir de Verzeichnis ze botzen:

$ rm -v *

Duerno schalt d'GLOBIGNORE Variabel aus:

$ unset GLOBIGNORE

Notiz: Fir d'Bedeitung vun de Fändelen ze verstoen, déi an de Kommandoen uewe benotzt ginn, kuckt op d'Man Säiten vun all Kommando, dee mir an de verschiddenen Illustratiounen benotzt hunn.

Dat ass alles! Wann Dir aner Kommandozeiltechniken am Kapp hutt fir dee selwechten Zweck, vergiesst net mat eis iwwer eis Feedback-Sektioun hei drënner ze deelen.