3 viisi kõigi kataloogi failide kustutamiseks, välja arvatud üks või mõni laiendiga fail


Mõnikord satute olukorda, kus peate kustutama kõik kataloogis olevad failid või puhastama kataloog lihtsalt, eemaldades kõik failid, välja arvatud teatud tüüpi failid (mis lõpevad kindla laiendiga).

Selles artiklis me näitame teile, kuidas kustutada faile kataloogist, välja arvatud teatud faililaiendid või -tüübid, kasutades rm, find ja globignore käske.

Enne kui edasi liikuda, alustame lühidalt ühest olulisest Linuxi kontseptsioonist - failinimede sobitamine, mis võimaldab meil oma probleemiga tegeleda.

Linuxis on koorimuster string, mis koosneb järgmistest erimärkidest, millele viidatakse kui metamärkidele või metamärkidele:

  1. * - sobib nulli või enama tähemärgiga
  2. ? - sobib ükskõik millise tähemärgiga
  3. [seq] - sobib mis tahes tähemärgiga seq
  4. [! seq] - sobib mis tahes tähemärgiga, mida pole seq

Siin on kolm võimalikku meetodit, mida me siin uurime:

Failide kustutamine laiendatud mustri sobitamise operaatorite abil

Erinevad laiendatud mustri sobitamise operaatorid on loetletud allpool, kus mustriloend on loend, mis sisaldab ühte või mitut failinime, eraldatuna märgiga | :

  1. * (mustriloend) - vastab nullile või enamale määratud mustrite esinemisele
  2. ? (mustriloend) - vastab nullile või ühele määratud mustrite esinemisele
  3. + (mustriloend) - sobib ühe või mitme määratud mustri esinemisega
  4. @ (mustriloend) - sobib ühega määratud mustritest
  5. ! (mustriloend) - sobib kõigega, välja arvatud üks antud mustritest

Nende kasutamiseks lubage extglob shell valik järgmiselt:

# shopt -s extglob

1. Kõigi kataloogis olevate failide kustutamiseks, välja arvatud failinimi, tippige järgmine käsk:

$ rm -v !("filename")

2. Kõigi failide, välja arvatud failinimi1 ja failinimi2, kustutamiseks toimige järgmiselt.

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

3. Allpool toodud näide näitab, kuidas interaktiivselt eemaldada kõik muud failid peale kõigi .zip -failide:

$ rm -i !(*.zip)

4. Järgmisena saate kustutada kõik kataloogis olevad failid peale kõigi .zip ja .odt failide järgmiselt, kuvades samal ajal tehtavat:

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

Kui olete kõik nõutavad käsud saanud, lülitage extglob shell valik välja nii:

$ shopt -u extglob

Failide kustutamine, kasutades Linuxi käsku find

Selle meetodi abil saame kasutada käsku find ainult koos sobivate suvanditega või koos käsuga xargs, kasutades torujuhet nagu allpool toodud vormidel:

$ 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. Järgmine käsk kustutab kõik failid peale praeguse kataloogi failide .gz :

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

6. Torujuhtme ja xargsi abil saate ülaltoodud juhtumit muuta järgmiselt:

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

7. Vaatame ühte täiendavat näidet. Allolev käsk hävitab kõik failid, välja arvatud failid .gz , .odt ja .jpg praeguses kataloogis:

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

Failide kustutamine muutuja Bash GLOBIGNORE abil

See viimane lähenemine töötab aga ainult bashiga. Siin salvestab muutuja GLOBIGNORE käärsoolega eraldatud mustriloendi (failinimed), mida teenime laiendamine eirab.

Selle meetodi kasutamiseks liikuge kataloogi, mille soovite puhastada, ja määrake muutuja GLOBIGNORE järgmiselt:

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

Sel juhul eemaldatakse praegusest kataloogist kõik muud failid kui failid .odt , .iso ja .txt .

Nüüd käivitage käsk kataloogi puhastamiseks:

$ rm -v *

Seejärel lülitage muutuja GLOBIGNORE välja:

$ unset GLOBIGNORE

Märkus. Ülaltoodud käskudes kasutatavate lippude tähenduse mõistmiseks vaadake iga käsu man-lehti, mida oleme erinevates illustratsioonides kasutanud.

See on kõik! Kui teil on samal eesmärgil mõni muu käsurea tehnika, pidage meeles, et jagage meiega allpool oleva tagasiside jaotise kaudu.