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:
*
– atitinka nulį ar daugiau simbolių?
– atitinka bet kurį vieną simbolį[seq]
– atitinka bet kurį eilės simbolį[!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 |
:
*(pattern-list)
– atitinka nulį ar daugiau nurodytų šablonų atvejų?(pattern-list)
– atitinka nulį arba vieną nurodytų šablonų atvejį- +(pattern-list) – atitinka vieną ar daugiau nurodytų šablonų atvejų
@(pattern-list)
– atitinka vieną iš nurodytų šablonų!(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ų.