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:

  1. * - odgovara nuli ili više znakova
  2. ? - odgovara bilo kojem pojedinačnom znaku
  3. [seq] - podudara se s bilo kojim znakom u seq
  4. [! 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 | :

  1. * (popis uzoraka) - podudara se s nula ili više pojavljivanja navedenih obrazaca
  2. ? (popis uzoraka) - odgovara nuli ili jednoj pojavi navedenih uzoraka
  3. + (popis uzoraka) - podudara se s jednim ili više pojavljivanja navedenih uzoraka
  4. @ (popis uzoraka) - odgovara jednom od navedenih obrazaca
  5. ! (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.