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:
-
*
- sobib nulli või enama tähemärgiga -
?
- sobib ükskõik millise tähemärgiga -
[seq]
- sobib mis tahes tähemärgiga seq -
[! 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 |
:
-
* (mustriloend)
- vastab nullile või enamale määratud mustrite esinemisele -
? (mustriloend)
- vastab nullile või ühele määratud mustrite esinemisele - + (mustriloend) - sobib ühe või mitme määratud mustri esinemisega
-
@ (mustriloend)
- sobib ühega määratud mustritest -
! (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.