4.3 - Wildcards i terminalen
Ofte ønsker vi å søke etter et mønster, eller gjøre operasjoner på filer/mapper som matcher med et mønster. Slik kan vi utføre handlinger på flere objekter samtidig, eller finne elementer og tekst uten å søke etter eksakte navn. Da bruker vi spesielle tegn som gjerne kalles "wildcards", som vi kan oversette til joker eller jokertegn på norsk.
OBS
Når du gjør operasjoner med wildcards kan du ende opp med å slette eller endre mange filer på en gang! Vær spesielt forsiktig med kommandoer som rm -rf *
som rekursivt sletter alle filer, mapper og undermapper fra der du står.
Grunnleggende wildcards
*
- matcher null eller flere tegn?
- matcher akkurat ett tegn[]
- matcher ett av tegnene i klammeparentesene[!]
- matcher ett tegn som IKKE er i klammeparentesene{,}
- matcher ett av ordene i krøllparantesen (adskilt av komma)^
- matcher starten av en linje
Vanlige bruksmåter med ls
# Grunnleggende filmatching
ls *.txt # Alle filer som slutter på .txt
ls data* # Alle filer som starter med "data"
ls *2023* # Alle filer som inneholder "2023"
ls file?.txt # file1.txt, file2.txt, men ikke file10.txt
ls [abc]*.txt # Filer som starter med a, b eller c
# Mer spesifikke mønstre
ls rapport_???? # Filer som starter med "rapport_" fulgt av 4 tegn
ls [0-9]*.txt # Filer som starter med et tall
ls [!a-z]* # Filer som IKKE starter med liten bokstav
Wildcards med grep
# Søk i filer
grep "ord" *.txt # Søk i alle .txt-filer
grep "error" *.{log,txt} # Søk i både .log og .txt-filer
grep "TODO" */*.py # Søk i Python-filer i undermapper
grep "^ord" fil.txt # Finn alle linjer som starter med 'ord' i fil.txt
Andre vanlige kommandoer
# Kopiering og flytting
cp *.txt backup/ # Kopier alle tekstfiler
mv *2023* arkiv/ # Flytt alle filer med "2023" i navnet
# Sletting (vær forsiktig!)
rm *.tmp # Slett alle .tmp-filer
Tips og fallgruver
*
matcher ikke skjulte filer (som starter med .)- Bruk
.??*
eller.[!.]*
for å matche skjulte filer
- Bruk
- For å matche de faktiske tegnene * eller ?, bruk
\*
eller\?
Praktiske eksempler
# Finne alle logger fra juni
ls *2023-06*.log
# Flytte alle bilder
mv *{.jpg,.png,.gif} bilder/
# Slette alle midlertidige filer
rm *{.tmp,.temp,~}
# Søke i kildekodefiler (som matcher de gitte filetternavnene)
grep "TODO" *{.py,.js,.java}