3 būdai, kaip ištrinti visus failus kataloge, išskyrus vieną ar kelis failus su plėtiniais


Kartais patenkate į situaciją, kai reikia ištrinti visus katalogo failus arba tiesiog išvalyti katalogą pašalinant visus failus, išskyrus tam tikro tipo failus (baigiant tam tikru plėtiniu).

Šiame straipsnyje parodysime, kaip ištrinti failus iš katalogo, išskyrus tam tikrus failų plėtinius arba tipus, naudojant komandas rm, find ir globignore.

Prieš judėdami toliau, trumpai pažvelkime į vieną svarbią Linux koncepciją – failų pavadinimų šablonų atitikimą, kuris leis mums išspręsti šią problemą.

Siūlomas skaitymas: naudokite komandą rasti norėdami ieškoti kelių failų pavadinimų/plėtinių sistemoje Linux

„Linux“ sistemoje apvalkalo šablonas yra eilutė, kurią sudaro šie specialieji simboliai, vadinami pakaitos simboliais arba metasimboliais:

  1. * – atitinka nulį ar daugiau simbolių
  2. ? – atitinka bet kurį vieną simbolį
  3. [seq] – atitinka bet kurį eilės simbolį
  4. [!seq] – atitinka bet kurį simbolį, kuris nėra sekoje

Čia išnagrinėsime tris galimus metodus, įskaitant:

Ištrinkite failus naudodami išplėstinio modelio atitikimo operatorius

Toliau pateikiami įvairūs išplėstinio šablono atitikimo operatoriai, kur pattern-list yra sąrašas, kuriame yra vienas ar daugiau failų pavadinimų, atskirtų simboliu |:

  1. *(pattern-list) – atitinka nulį ar daugiau nurodytų šablonų atvejų
  2. ?(pattern-list) – atitinka nulį arba vieną nurodytų šablonų atvejį
  3. +(pattern-list) – atitinka vieną ar daugiau nurodytų šablonų atvejų
  4. @(pattern-list) – atitinka vieną iš nurodytų šablonų
  5. !(pattern-list) – atitinka bet ką, išskyrus vieną iš pateiktų šablonų

Norėdami juos naudoti, įgalinkite extglob apvalkalo parinktį, kaip nurodyta toliau:

shopt -s extglob

1. Norėdami ištrinti visus failus iš katalogo, išskyrus failo pavadinimą, įveskite toliau pateiktą komandą:

rm -v !("filename")

2. Jei norite ištrinti visus failus, išskyrus 1 failo pavadinimas ir 2 failo pavadinimas:

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

3. Toliau pateiktame pavyzdyje parodyta, kaip interaktyviai pašalinti visus failus, išskyrus visus .zip failus:

rm -i !(*.zip)

4. Tada galite ištrinti visus kataloge esančius failus, išskyrus visus .zip ir .odt failus, kaip nurodyta toliau, tuo pačiu rodydami, kas yra padaryta:

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

Kai turėsite visas reikiamas komandas, išjunkite extglob apvalkalo parinktį taip:

shopt -u extglob

Ištrinkite failus naudodami „Linux“ raskite komandą

Taikydami šį metodą galime naudoti komandą find tik su atitinkamomis parinktimis arba kartu su komanda xargs, naudodami konvejerį, kaip nurodyta toliau pateiktose formose:

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. Ši komanda ištrins visus failus, išskyrus .gz failus dabartiniame kataloge:

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

6. Naudodami konvejerį ir xargs, galite modifikuoti anksčiau pateiktą didžiąją raidę taip:

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

7. Pažvelkime į vieną papildomą pavyzdį, toliau pateikta komanda ištrins visus failus, išskyrus .gz, .odt ir .jpg failai dabartiniame kataloge:

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

Ištrinkite failus naudodami Bash GLOBIGNORE kintamąjį

Tačiau šis paskutinis metodas veikia tik su bash. Čia kintamasis GLOBIGNORE saugo dvitaškiu atskirtą šablonų sąrašą (failų pavadinimus), į kuriuos bus nepaisoma išplečiant kelio pavadinimą.

Siūlomas skaitymas: Naudingi 12 praktinių „Grep“ komandos „Linux“ pavyzdžių

Norėdami naudoti šį metodą, pereikite į katalogą, kurį norite išvalyti, tada nustatykite kintamąjį GLOBIGNORE taip:

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

Šiuo atveju visi failai, išskyrus .odt, .iso ir .txt failus, turi būti pašalinti iš dabartinio katalogo.

Dabar paleiskite komandą, kad išvalytumėte katalogą:

rm -v *

Po to išjunkite GLOBIGNORE kintamąjį:

unset GLOBIGNORE

Pastaba: norėdami suprasti anksčiau pateiktose komandose naudojamų vėliavėlių reikšmę, žr. kiekvienos komandos, kurią naudojome įvairiose iliustracijose, puslapius.

Tai viskas! Jei tam pačiam tikslui turite kokių nors kitų komandinės eilutės metodų, nepamirškite pasidalinti su mumis naudodami toliau pateiktą atsiliepimų skyrių.