3 veidi, kā izdzēst visus direktorija failus, izņemot vienu vai dažus failus ar paplašinājumiem


Dažreiz jūs nonākat situācijā, kad jums jāizdzēš visi direktorijā esošie faili vai vienkārši jāattīra katalogs, noņemot visus failus, izņemot noteikta veida failus (kas beidzas ar noteiktu paplašinājumu).

Šajā rakstā mēs parādīsim, kā izdzēst failus direktorijā, izņemot dažus failu paplašinājumus vai veidus, izmantojot komandas rm, find un globignore.

Pirms mēs virzāmies tālāk, sāksim īsi apskatīt vienu svarīgu Linux jēdzienu - faila nosaukuma modeļa saskaņošanu, kas ļaus mums tikt galā ar mūsu problēmu.

Linux čaulas modelis ir virkne, kas sastāv no šādām īpašajām rakstzīmēm, kuras tiek dēvētas par aizstājējzīmēm vai metarakstu zīmēm:

  1. * - atbilst nullei vai vairāk rakstzīmēm
  2. ? - atbilst jebkurai atsevišķai rakstzīmei
  3. [seq] - atbilst jebkurai sekā esošai rakstzīmei
  4. [! seq] - atbilst jebkurai rakstzīmei, kas nav seq

Šeit mēs izpētīsim trīs iespējamās metodes, un tās ietver:

Dzēst failus, izmantojot paplašinātā modeļa atbilstības operatorus

Dažādi paplašināto rakstu atbilstības operatori ir uzskaitīti zemāk, kur rakstu saraksts ir saraksts, kurā ir viens vai vairāki failu nosaukumi, atdalīti ar rakstzīmi | :

  1. * (pattern-list) - atbilst nullei vai vairākiem norādīto modeļu gadījumiem
  2. ? (pattern-list) - atbilst nullei vai vienam norādīto modeļu gadījumam
  3. + (modeļu saraksts) - atbilst vienam vai vairākiem norādīto modeļu gadījumiem
  4. @ (pattern-list) - atbilst vienam no norādītajiem modeļiem
  5. ! (pattern-list) - atbilst visam, izņemot vienu no dotajiem modeļiem

Lai tos izmantotu, iespējojiet opciju extglob apvalks šādi:

# shopt -s extglob

1. Lai izdzēstu visus direktorijas failus, izņemot faila nosaukumu, ierakstiet zemāk esošo komandu:

$ rm -v !("filename")

2. Lai izdzēstu visus failus, izņemot faila nosaukums1 un faila nosaukums2:

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

3. Tālāk sniegtajā piemērā parādīts, kā interaktīvi noņemt visus failus, izņemot visus .zip failus:

$ rm -i !(*.zip)

4. Pēc tam jūs varat izdzēst visus direktorijā esošos failus, izņemot visus .zip un .odt failus, parādot to, kas tiek darīts:

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

Kad esat saņēmis visas nepieciešamās komandas, izslēdziet extglob apvalka opciju šādi:

$ shopt -u extglob

Dzēst failus, izmantojot Linux atrast komandu

Saskaņā ar šo metodi mēs varam izmantot komandu atrast tikai ar atbilstošām opcijām vai kopā ar komandu xargs, izmantojot cauruļvadu, kā norādīts zemāk esošajās formās:

$ 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. Šī komanda izdzēsīs visus failus, izņemot .gz failus pašreizējā direktorijā:

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

6. Izmantojot cauruļvadu un xargs, iepriekš minēto gadījumu varat modificēt šādi:

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

7. Apskatīsim vēl vienu piemēru. Tālāk esošā komanda iznīcinās visus failus, izņemot failus .gz , .odt un .jpg . pašreizējā direktorijā:

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

Dzēst failus, izmantojot mainīgo Bash GLOBIGNORE

Šī pēdējā pieeja tomēr darbojas tikai ar bash. Šeit mainīgais GLOBIGNORE saglabā ar kolu atdalītu rakstu sarakstu (failu nosaukumus), kurus neņem vērā, paplašinot ceļa nosaukumu.

Lai izmantotu šo metodi, pārejiet uz direktoriju, kuru vēlaties sakopt, pēc tam iestatiet mainīgo GLOBIGNORE šādi:

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

Šajā gadījumā visi faili, kas nav faili .odt , .iso un .txt , tiek noņemti no pašreizējā direktorija.

Tagad palaidiet komandu, lai iztīrītu direktoriju:

$ rm -v *

Pēc tam izslēdziet mainīgo GLOBIGNORE:

$ unset GLOBIGNORE

Piezīme. Lai saprastu iepriekš norādītajās komandās izmantoto karodziņu nozīmi, skatiet katras komandas rokasgrāmatas lapas, kuras esam izmantojuši dažādās ilustrācijās.

Tas ir viss! Ja jums ir kādas citas komandrindas metodes, kas domātas vienam un tam pašam mērķim, neaizmirstiet dalīties ar mums, izmantojot mūsu atsauksmju sadaļu.