3 načina za brisanje svih datoteka iz direktorija, osim jedne ili nekoliko datoteka s proširenjima
Ponekad dođete u situaciju da trebate izbrisati sve datoteke iz direktorija ili jednostavno očistiti direktorij uklanjanjem svih datoteka osim datoteka određene vrste (završavajući određenim nastavkom).
U ovom ćemo vam članku pokazati kako izbrisati datoteke iz direktorija, osim određenih ekstenzija ili vrsta datoteka, pomoću naredbi rm, find i globignore.
Prije nego što krenemo dalje, krenimo s kratkim uvidom u jedan važan koncept u Linuxu - podudaranje uzorka naziva datoteke, koji će nam omogućiti da se pozabavimo našim problemom.
U Linuxu uzorak ljuske je niz koji se sastoji od sljedećih posebnih znakova, koji se nazivaju zamjenskim znakovima ili metaznakovima:
-
*
- odgovara nuli ili više znakova -
?
- odgovara bilo kojem pojedinačnom znaku -
[seq]
- podudara se s bilo kojim znakom u seq -
[! seq]
- odgovara bilo kojem znaku koji nije u seq
Ovdje ćemo istražiti tri moguće metode, a one uključuju:
Brisanje datoteka pomoću operatora proširenog podudaranja uzoraka
U nastavku su navedeni različiti operateri proširenog podudaranja uzoraka, gdje je popis uzoraka popis koji sadrži jedno ili više imena datoteka, odvojenih znakom |
:
-
* (popis uzoraka)
- podudara se s nula ili više pojavljivanja navedenih obrazaca -
? (popis uzoraka)
- odgovara nuli ili jednoj pojavi navedenih uzoraka - + (popis uzoraka) - podudara se s jednim ili više pojavljivanja navedenih uzoraka
-
@ (popis uzoraka)
- odgovara jednom od navedenih obrazaca -
! (popis uzoraka)
- podudara se s bilo čime osim jednim od zadanih uzoraka
Da biste ih koristili, omogućite opciju ljuske extglob kako slijedi:
# shopt -s extglob
1. Da biste izbrisali sve datoteke u direktoriju, osim imena datoteke, upišite naredbu ispod:
$ rm -v !("filename")
2. Da biste izbrisali sve datoteke, osim filename1 i filename2:
$ rm -v !("filename1"|"filename2")
3. Primjer u nastavku pokazuje kako interaktivno ukloniti sve datoteke osim svih datoteka .zip
:
$ rm -i !(*.zip)
4. Zatim možete izbrisati sve datoteke u direktorijumu, osim svih datoteka .zip
i .odt
, kako slijedi, dok prikazujete što se radi:
$ rm -v !(*.zip|*.odt)
Nakon što ste dobili sve potrebne naredbe, isključite opciju ljuske extglob ovako:
$ shopt -u extglob
Brisanje datoteka pomoću naredbe find Linux
Prema ovoj metodi, naredbu find možemo koristiti isključivo s odgovarajućim opcijama ili zajedno s naredbom xargs primjenom cjevovoda kao u donjim obrascima:
$ 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. Sljedeća naredba će izbrisati sve datoteke osim datoteka .gz
u trenutnom direktoriju:
$ find . -type f -not -name '*.gz'-delete
6. Koristeći cjevovod i xargs, možete izmijeniti gornji slučaj na sljedeći način:
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7. Pogledajmo jedan dodatni primjer, naredba u nastavku izbrisat će sve datoteke osim datoteka .gz
, .odt
i .jpg
u trenutnom direktoriju:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
Brisanje datoteka pomoću varijable Bash GLOBIGNORE
Međutim, ovaj posljednji pristup funkcionira samo s bashom. Ovdje varijabla GLOBIGNORE pohranjuje popis uzoraka odvojenih dvotačkom (imena datoteka) koji se ignoriraju proširenjem naziva staze.
Da biste upotrijebili ovu metodu, premjestite se u direktorij koji želite očistiti, a zatim postavite varijablu GLOBIGNORE na sljedeći način:
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
U ovom slučaju, sve datoteke osim .odt
, .iso
i .txt
koje se uklanjaju iz trenutnog direktorija.
Sada pokrenite naredbu za čišćenje direktorija:
$ rm -v *
Nakon toga isključite GLOBIGNORE varijablu:
$ unset GLOBIGNORE
Napomena: Da biste razumjeli značenje zastavica korištenih u gornjim naredbama, pogledajte stranice s uputama svake naredbe koje smo koristili u raznim ilustracijama.
To je sve! Ako imate na umu bilo koju drugu tehniku naredbenog retka u istu svrhu, ne zaboravite podijeliti s nama putem našeg odjeljka za povratne informacije u nastavku.