Noen ganger kommer du i en situasjon der du trenger det slette alle filene i en katalog eller bare rydde opp i en katalog ved å fjerne alle filer unntatt filer av en gitt type (slutter med en bestemt utvidelse).
I denne artikkelen vil vi vise deg hvordan du sletter filer i en katalog, bortsett fra visse filutvidelser eller typer som bruker rm, finne og globignore kommandoer.
Før vi går videre, la oss begynne med å kort se på et viktig konsept i Linux - filnavnmønstermatching, som vil gjøre oss i stand til å håndtere problemet vårt.
Foreslått lesning:Bruk finn kommando for å søke i flere filnavn/utvidelser i Linux
I Linux er et skallmønster en streng som består av følgende spesialtegn, som omtales som jokertegn eller metakarakterer:
*
- matcher null eller flere tegn?
- matcher et hvilket som helst enkelt tegn[seq]
- matcher alle tegn i sekvensen[! seq]
- matcher alle tegn som ikke er i sekvensDet er tre mulige metoder vi skal utforske her, og disse inkluderer:
De forskjellige operatørene for utvidet mønstermatching er oppført nedenfor, hvor mønsterliste er en liste som inneholder ett eller flere filnavn, atskilt med |
karakter:
*(mønsterliste)
- matcher null eller flere forekomster av de angitte mønstrene? (mønsterliste)
- matcher null eller én forekomst av de angitte mønstrene@(mønsterliste)
- matcher et av de angitte mønstrene! (mønsterliste)
- matcher alt unntatt ett av de gitte mønstreneFor å bruke dem, aktiver extglob skallalternativ som følger:
# shopt -s extglob.
1. For å slette alle filer i en katalog bortsett fra filnavn, skriver du kommandoen nedenfor:
$ rm -v! ("filnavn")
2. For å slette alle filer med unntak av filnavn1 og filnavn2:
$ rm -v! ("filnavn1" | "filnavn2")
3. Eksemplet nedenfor viser hvordan du fjerner alle andre filer enn alle .glidelås
filer interaktivt:
$ rm -i! (*. zip)
4. Deretter kan du slette alle filene i en katalog bortsett fra alle .glidelås
og .odt
filer som følger, mens du viser hva som blir gjort:
$ rm -v! (*. zip |*.odt)
Når du har alle de nødvendige kommandoene, slår du av extglob skallalternativ slik:
$ shopt -u extglob.
Under denne metoden kan vi bruk finn kommando utelukkende med passende alternativer eller i forbindelse med xargs kommando ved å bruke en rørledning som i skjemaene nedenfor:
$ 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 [alternativer] {}
5. Følgende kommando sletter alle filene bortsett fra .gz
filer i den nåværende katalogen:
$ finne. -type f -not -name '*.gz' -delete.
6. Bruker en rørledning og xargs, kan du endre saken ovenfor som følger:
$ finne. -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7. La oss se på et ekstra eksempel, kommandoen nedenfor vil utslette alle filer unntatt .gz
, .odt
, og .jpg
filer i den nåværende katalogen:
$ finne. -type f -not \ ( -navn '*gz' -eller -navn '*odt' -eller -navn '*.jpg' \) -slett.
Denne siste tilnærmingen fungerer imidlertid bare med bash. Her, den GLOBIGNORE variabel lagrer en kolon-separert mønsterliste (filnavn) som skal ignoreres av utvidelse av banenavn.
Foreslått lesning:Nyttige 12 praktiske eksempler på Grep Command i Linux
For å bruke denne metoden, gå inn i katalogen du vil rydde opp, og sett deretter GLOBIGNORE variabel som følger:
$ cd test. $ GLOBIGNORE =*. Odt:*. Iso:*. Txt.
I dette tilfellet alle andre filer enn .odt
, .iso
, og .tekst
filer som skal fjernes fra den nåværende katalogen.
Kjør nå kommandoen for å rydde opp i katalogen:
$ rm -v *
Slå av etterpå GLOBIGNORE variabel:
$ uinnstilt GLOBIGNORE.
Merk: For å forstå betydningen av flaggene som brukes i kommandoene ovenfor, se man -sidene til hver kommando vi har brukt i de forskjellige illustrasjonene.
Det er alt! Hvis du har andre kommandolinjeteknikker i tankene for samme formål, ikke glem å dele med oss via tilbakemeldingsdelen nedenfor.