Jeg vet hvordan jeg skal slette alle txt -filene under den aktuelle katalogen av rm *.txt. Er det noen som vet hvordan du sletter alle filene i gjeldende katalog UNNTATT txt -filen? 
Kommentarer
Svar
 Du kan bruke find: 
find . -type f ! -name "*.txt" -delete Eller bashs utvidede globbing-funksjoner:
shopt -s extglob rm *.!(txt) Eller i zsh:
setopt extendedglob rm *~*.txt(.) # || ^^^ Only plain files # ||^^^^^ files ending in ".txt" # | \Except # \Everything Kommentarer
- Noen av disse må kanskje tilpasses avhengig av om du har mapper og hva du vil gjøre med dem.
-  Skal ' t *.!(txt)være!(*.txt)?
-  @LauriRanta avhenger av hva ' s i mappen, som vi ikke har ' t fikk svar på. Det er ' som om alle filene har utvidelser, og rmville kveles hvis det var mapper.
- Jeg ' har fått et problem med parentesene. Når jeg bruker globbing-stilen i et bash-skript, klager det på en syntaksfeil og parentesene. Imidlertid fungerer det fra CLI.
-  @izogfif sjekk dette find . -type f ! -name "*.txt" | xargs -r rmvil fungere i GNU \ xargs. BSD og UNIX xargs-kommando har kanskje ikke -r du må sjekke det lokaleman xargs
Svar
Hvis du bare vil slette alle filer bortsett fra «* .txt», kan du bruk følgende kommando:
 $ find . -type f ! -name "*.txt" -exec rm -rf {} \; 
men hvis du også vil slette kataloger sammen med filene, så kan du bruke dette:
 $ find . ! -name "*.txt" -exec rm -r {} \; 
Svar
det er mange måter å gjøre det på. men den enkleste måten ville være (bash):
shopt -s extglob rm !(*.txt) Kommentarer
- Hvordan kan jeg bruke dette for å spesifisere flere utvidelser?
-  shopt -s extglober kraftig. tecmint.com/… gir gode eksempler. For å slette alle unntatt visse utvidelser, fungererrm -v !(*.zip|*.odt).
Svar
Du kan bruke invertert grep og xargs
ls | grep -v .txt$| xargs rm Kommentarer
-  ls | grep -v *.txt | xargs rmfungerer like bra
-  @phillipsk grep -v *.txtfungerer bare hvis det ' er nøyaktig en.txt-fil. Hvis det ikke er noen, vilgrepbruke*.txtsom mønster; hvis det ' er mer enn en, vil den søke etter det første filnavnet i alle de andre.txt-filene, og ignorere utdata frals. (Nøyaktige resultater kan avhenge av shell ' s globalternativer.)
-  .txt$vil matche strenger som slutter medtxtuansett prikk. Fordigreptar vanlig uttrykk som parameter. Så filera.txtogaatxtoga-txtvil alle bli matchet av dette uttrykket. Riktig uttrykk skal værels | grep -v \\.txt$ | xargs --no-run-if-empty rm. For nysgjerrige mennesker: Hvis du vil leke med uttrykket trygt, bruk dette testuttrykketls | grep \\.txt$ | xargs --no-run-if-empty echo(merk: det ' er ingen-vflagg ogrm=>echo). Merknad 2: Du har kanskje lagt merke til dobbel tilbakeslag. Den ene er for regex, en annen er for bash å slippe skråstrek.
Svar
 En løsning uten find: 
mv dir/*.txt otherdir/ rm -r dir mv otherdir dir Dette skal fungere på alle slags skjell.
Svar
Bare gjør:
  rm $(ls -I "*.txt" )   #Sletter filtypen unntatt * .txt  
På samme måte, hvis du trenger å slette «unntatt en eller flere filtyper», gjør du:
  rm $(ls -I "*.txt" -I "*.pdf" )  # Sletter filtyper unntatt * .txt & * .pdf 
Kommentarer
-  Velkommen til StackExchange!-I-alternativet kan være nyttig, men se hvorfor ikke analysere ls . Og hva oppnår| xargs? Uten noen argumenter kjører den bareechopå alle innspillene.
-  Hva skal xargsoppnå?
- Takk, xargs var ikke nyttig i ovennevnte tilfelle, har korrigert nå.
Svar
 Dette fungerer også for å fjerne alle  skjulte (punkt)  filer og mapper bortsett fra den oppgitte filen (.mydir): 
rm -rf $(ls -aI ".mydir") 
lsfør du faktisk prøver å ringerm.