Jeg ved hvordan man sletter alle txt filer under den aktuelle mappe ved rm *.txt. Er der nogen, der ved, hvordan man sletter alle filer i det aktuelle bibliotek Bortset fra txt -fil? 
Kommentarer
Svar
 Du kan bruge find: 
find . -type f ! -name "*.txt" -delete 
Eller bashs udvidede globbing-funktioner:
shopt -s extglob rm *.!(txt) 
Eller i zsh:
setopt extendedglob rm *~*.txt(.) # || ^^^ Only plain files # ||^^^^^ files ending in ".txt" # | \Except # \Everything 
Kommentarer
- Nogle af disse skal muligvis tilpasses, afhængigt af om du har mapper, og hvad du vil gøre med dem.
 -  Skal ' t 
*.!(txt)være!(*.txt)? -  @LauriRanta afhænger af, hvad ' s i mappen, som vi ikke har ' t fik et svar på. Det ' er fint, som hvis alle filerne har filtypenavne, og 
rmville kvæles, hvis der var mapper. - Jeg ' har et problem med parenteserne. Når jeg bruger den globerende stil i et bash-script, klager det over en syntaksfejl og parenteserne. Men at gøre det fra CLI fungerer.
 -  @izogfif tjek dette 
find . -type f ! -name "*.txt" | xargs -r rmfungerer i GNU \ xargs. BSD og UNIX xargs-kommandoen har muligvis ikke -r du skal kontrollere dit lokaleman xargs 
Svar
Hvis du bare vil slette alle filer undtagen “* .txt” så kan du brug følgende kommando:
 $ find . -type f ! -name "*.txt" -exec rm -rf {} \; 
men hvis du også vil slette mapper sammen med filerne, så kan du bruge dette:
 $ find . ! -name "*.txt" -exec rm -r {} \; 
Svar
der er mange måder, det kan gøres på. men den mest enkle måde ville være (bash):
shopt -s extglob rm !(*.txt) 
Kommentarer
- Hvordan kan jeg bruge dette for at specificere flere udvidelser?
 -  
shopt -s extglober kraftfuldt. tecmint.com/… giver gode eksempler. For at slette alle undtagen bestemte udvidelser fungererrm -v !(*.zip|*.odt). 
Svar
Du kan bruge inverteret grep og xargs
ls | grep -v .txt$| xargs rm 
Kommentarer
-  
ls | grep -v *.txt | xargs rmfungerer lige så godt -  @phillipsk 
grep -v *.txtfungerer kun, hvis der ' er nøjagtigt en.txt-fil. Hvis der ikke er nogen, vilgrepbruge*.txtsom mønster; hvis der ' er mere end en, vil den søge efter det første filnavn i alle de andre.txtfiler og ignorere output frals. (Nøjagtige resultater kan afhænge af skallen ' s glob-muligheder.) -  
.txt$matcher strenge, der slutter medtxtuanset prikken. Fordigreptager regelmæssigt udtryk som parameter. Så filera.txtogaatxtoga-txtmatches alle med dette udtryk. Korrekt udtryk skal værels | grep -v \\.txt$ | xargs --no-run-if-empty rm. For nysgerrige mennesker: Hvis du vil lege med udtrykket sikkert, skal du bruge dette testudtrykls | grep \\.txt$ | xargs --no-run-if-empty echo(note: der ' er ingen-vflag ogrm=>echo). Note2: Du har muligvis bemærket dobbelt tilbageslag. Den ene er til regex, en anden er for bash at undslippe skråstreg. 
Svar
 En løsning uden find: 
mv dir/*.txt otherdir/ rm -r dir mv otherdir dir 
Dette skal fungere på alle slags skaller.
Svar
Gør det blot:
  rm $(ls -I "*.txt" )   # Slet filtype undtagen * .txt  
Hvis det er nødvendigt at slette “undtagen en eller flere filtyper”, skal du også gøre:
  rm $(ls -I "*.txt" -I "*.pdf" )  #Sletter filtyper undtagen * .txt & * .pdf 
Kommentarer
-  Velkommen til StackExchange!Indstillingen 
-Ikan være nyttig, men se hvorfor ikke parse ls . Og hvad opnår| xargs? Uden argumenter kører den bareechopå alle dens input. -  Hvad skal 
xargsopnå? - Tak, xargs var ikke nyttigt i ovenstående tilfælde, er rettet nu.
 
Svar
 Dette fungerer også for at fjerne alle  skjulte (dot)  filer og mapper undtagen den angivne (.mydir): 
rm -rf $(ls -aI ".mydir") 
lsfør du faktisk prøver at ringe tilrm.