3 tapaa poistaa kaikki tiedostot hakemistosta, paitsi yksi tai muutama tiedosto laajennuksilla


Joskus joudut tilanteeseen, jossa sinun on poistettava kaikki hakemiston tiedostot tai yksinkertaisesti siivottava hakemisto poistamalla kaikki tiedostot paitsi tietyn tyyppiset tiedostot (joka päättyy tiettyyn tunnisteeseen).

Tässä artikkelissa näytämme, kuinka voit poistaa tiedostoja hakemistosta paitsi tiettyjä tiedostopäätteitä tai -tyyppejä käyttämällä rm-, find- ja globignore-komentoja.

Ennen kuin siirrymme pidemmälle, lähdetään tarkastelemalla lyhyesti yhtä tärkeää Linuxin käsitettä – tiedostonimien mallin sovitusta, jonka avulla voimme käsitellä käsillä olevaa ongelmaamme.

Suositeltu luku: Käytä find-komentoa useiden tiedostonimien/laajennusten etsimiseen Linuxissa

Linuxissa komentotulkkikuvio on merkkijono, joka koostuu seuraavista erikoismerkeistä, joita kutsutaan jokerimerkeiksi tai metamerkkeiksi:

  1. * – vastaa nollaa tai useampaa merkkiä
  2. ? – vastaa mitä tahansa yksittäistä merkkiä
  3. [seq] – vastaa mitä tahansa merkkiä sekv
  4. [!seq] – vastaa mitä tahansa merkkiä, joka ei ole sekv

Tässä on kolme mahdollista menetelmää, joita tutkimme, ja niitä ovat:

Poista tiedostot Extended Pattern Matching Operatoreilla

Eri laajennetut kuvion täsmäytysoperaattorit on lueteltu alla, missä pattern-list on luettelo, joka sisältää yhden tai useamman tiedostonimen erotettuna |-merkillä:

  1. *(pattern-list) – vastaa nollaa tai useampaa määritettyjen kuvioiden esiintymää
  2. ?(pattern-list) – vastaa nollaa tai yhtä esiintymää määritetyistä kuvioista
  3. +(pattern-list) – vastaa yhtä tai useampaa määritettyjen kuvioiden esiintymää
  4. @(pattern-list) – vastaa yhtä määritetyistä malleista
  5. !(pattern-list) – vastaa mitä tahansa muuta paitsi yhtä annetuista malleista

Jos haluat käyttää niitä, ota extglob-kuorivaihtoehto käyttöön seuraavasti:

shopt -s extglob

1. Jos haluat poistaa kaikki tiedostot hakemistosta paitsi tiedostonimi, kirjoita alla oleva komento:

rm -v !("filename")

2. Kaikkien tiedostojen poistaminen paitsi tiedostonimi1 ja tiedostonimi2:

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

3. Alla oleva esimerkki näyttää, kuinka kaikki muut tiedostot paitsi .zip-tiedostot poistetaan interaktiivisesti:

rm -i !(*.zip)

4. Seuraavaksi voit poistaa kaikki hakemiston tiedostot lukuun ottamatta kaikkia .zip- ja .odt-tiedostoja seuraavasti, kun näet samalla, mitä parhaillaan käsitellään. tehty:

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

Kun olet saanut kaikki tarvittavat komennot, poista extglob-kuoriasetus käytöstä seuraavasti:

shopt -u extglob

Tiedostojen poistaminen Linuxin avulla etsi komento

Tässä menetelmässä voimme käyttää find-komentoa yksinomaan sopivien vaihtoehtojen kanssa tai yhdessä xargs-komennon kanssa käyttämällä liukuhihnaa alla olevien lomakkeiden mukaisesti:

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. Seuraava komento poistaa kaikki tiedostot paitsi .gz-tiedostot nykyisestä hakemistosta:

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

6. Käyttämällä pipelineä ja xargeja voit muokata yllä olevaa tapausta seuraavasti:

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

7. Katsotaanpa vielä yhtä esimerkkiä. Alla oleva komento pyyhkii pois kaikki tiedostot paitsi .gz, .odt ja .jpg-tiedostot nykyisessä hakemistossa:

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

Poista tiedostot Bash GLOBIGNORE -muuttujalla

Tämä viimeinen lähestymistapa toimii kuitenkin vain bashin kanssa. Tässä GLOBIGNORE-muuttuja tallentaa kaksoispisteellä erotetun malliluettelon (tiedostojen nimet), jotka jätetään huomioimatta polun nimen laajennuksella.

Suositeltu luku: Hyödyllisiä 12 käytännön esimerkkiä Grep-komennosta Linuxissa

Käytä tätä menetelmää siirtymällä hakemistoon, jonka haluat puhdistaa, ja aseta sitten GLOBIGNORE-muuttuja seuraavasti:

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

Tässä tapauksessa kaikki muut kuin .odt-, .iso- ja .txt-tiedostot poistetaan nykyisestä hakemistosta.

Suorita nyt komento puhdistaaksesi hakemisto:

rm -v *

Poista sen jälkeen GLOBIGNORE-muuttuja käytöstä:

unset GLOBIGNORE

Huomaa: Ymmärtääksesi yllä olevissa komennoissa käytettyjen lippujen merkityksen, katso kunkin kuvissa käyttämämme komennon man-sivut.

Siinä kaikki! Jos sinulla on mielessäsi muita komentorivitekniikoita samaan tarkoitukseen, älä unohda jakaa meille alla olevan palauteosion kautta.