3 leiðir til að eyða öllum skrám í möppu nema einni eða fáum skrám með viðbótum


Stundum lendirðu í aðstæðum þar sem þú þarft að eyða öllum skrám í möppu eða einfaldlega hreinsa möppu með því að fjarlægja allar skrár nema skrár af tiltekinni gerð (endar með tiltekinni viðbót).

Í þessari grein munum við sýna þér hvernig á að eyða skrám í möppu nema ákveðnar skráarendingar eða -gerðir með því að nota rm, find og globignore skipanir.

Áður en lengra er haldið skulum við byrja á því að kíkja stuttlega á eitt mikilvægt hugtak í Linux - samsvörun skráarnafna, sem gerir okkur kleift að takast á við vandamál okkar.

Í Linux er skeljamynstur strengur sem samanstendur af eftirfarandi sérstöfum, sem vísað er til sem jokertákn eða metatákn:

  1. * – passar við núll eða fleiri stafi
  2. ? – passar við einhvern stakan staf
  3. [seq] – passar við hvaða staf sem er í seq
  4. [!seq] – passar við hvaða staf sem er ekki í seq

Það eru þrjár mögulegar aðferðir sem við munum kanna hér, og þar á meðal:

Eyða skrám með því að nota útbreidda mynstursamsvörun

Hinir ýmsu útbreiddu mynstursamsvörun rekstraraðilar eru taldir upp hér að neðan, þar sem mynstur-listi er listi sem inniheldur eitt eða fleiri skráarnöfn, aðskilin með | stafnum:

  1. *(mynstur-listi) – passar við núll eða fleiri tilvik af tilgreindum mynstrum
  2. ?(pattern-list) – passar við núll eða eitt tilvik af tilgreindum mynstrum
  3. +(mynstur-listi) – passar við eitt eða fleiri tilvik af tilgreindum mynstrum
  4. @(pattern-list) – passar við eitt af tilgreindum mynstrum
  5. !(pattern-list) – passar við allt nema eitt af tilteknum mynstrum

Til að nota þá, virkjaðu extglob skel valkostinn sem hér segir:

# shopt -s extglob

1. Til að eyða öllum skrám í möppu nema skráarnafni skaltu slá inn skipunina hér að neðan:

$ rm -v !("filename")

2. Til að eyða öllum skrám að undanskildum skráarnafni1 og skráarnafni2:

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

3. Dæmið hér að neðan sýnir hvernig á að fjarlægja allar skrár aðrar en allar .zip skrár gagnvirkt:

$ rm -i !(*.zip)

4. Næst geturðu eytt öllum skrám í möppu fyrir utan allar .zip og .odt skrár eins og hér segir, á meðan þú sýnir hvað er verið að gera:

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

Þegar þú hefur allar nauðsynlegar skipanir skaltu slökkva á extglob skel valkostinum eins og svo:

$ shopt -u extglob

Eyða skrám með því að nota Linux find Command

Undir þessari aðferð getum við notað finna skipun eingöngu með viðeigandi valkostum eða í tengslum við xargs skipun með því að nota leiðslu eins og í eyðublöðunum hér að neðan:

$ 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. Eftirfarandi skipun mun eyða öllum skrám fyrir utan .gz skrár í núverandi möppu:

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

6. Með því að nota leiðslu og xargs geturðu breytt málinu hér að ofan sem hér segir:

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

7. Við skulum skoða eitt dæmi til viðbótar, skipunin hér að neðan mun eyða öllum skrám að undanskildum .gz, .odt og .jpg skrám í núverandi möppu:

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

Eyða skrám með Bash GLOBIGNORE breytu

Þessi síðasta aðferð virkar þó aðeins með bash. Hér geymir GLOBIGNORE breytan með ristli aðskilinn mynsturlista (skráarheiti) til að hunsa með stækkun slóðnafna.

Til að nota þessa aðferð, farðu inn í möppuna sem þú vilt hreinsa upp, stilltu síðan GLOBIGNORE breytuna sem hér segir:

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

Í þessu tilviki verða allar skrár aðrar en .odt, .iso og .txt skrár fjarlægðar úr núverandi möppu.

Keyrðu nú skipunina til að hreinsa upp möppuna:

$ rm -v *

Slökktu síðan á GLOBIGNORE breytu:

$ unset GLOBIGNORE

Athugasemd: Til að skilja merkingu fánanna sem notaðir eru í skipunum hér að ofan, skoðaðu handsíður hverrar skipunar sem við höfum notað í hinum ýmsu myndum.

Það er allt og sumt! Ef þú hefur einhverjar aðrar skipanalínutækni í huga í sama tilgangi, ekki gleyma að deila með okkur í gegnum athugasemdahlutann okkar hér að neðan.