Vi vil i dette afsnit se på et par af systemets mere smarte funktioner, som gør livet lettere for dig som bruger.
Forestil dig, at du har mange filer, som du gerne vil slette. Du kan naturligvis skrive rm filnavn for hvert enkelt navn, men bare med 5-10 filer bliver du hurtigt træt af det. Redningen er joker-tegnet. Lad os antage, at du har tre filer i et katalog, og at du gerne vil slette dem alle. Nedenfor ser du hvordan:
[tyge@hven MitKatalog]$ touch aaa abc ccc [tyge@hven MitKatalog]$ ls aaa abc ccc [tyge@hven MitKatalog]$ rm * [tyge@hven MitKatalog]$ ls [tyge@hven MitKatalog]$ |
Alle filer er det samme som *. Hvis du i stedet havde skrevet a*, betyder det alle filer som begynder med a.
[tyge@hven MitKatalog]$ touch aaa abc ccc [tyge@hven MitKatalog]$ ls aaa abc ccc [tyge@hven MitKatalog]$ rm a* [tyge@hven MitKatalog]$ ls ccc [tyge@hven NytKatalog]$ |
Stjernen, også kaldet joker-tegnet, kan bruges overalt. F.eks. betyder a*b alle filer, der begynder med a og slutter på b, hvilket vil inkludere filerne ab, aDuErGodb, men ikke en fil med navnet abe. Joker-tegnet kan bruges sammen med alle de mest almindelige kommandoer i Linux. F.eks. viser nedenstående eksempel hvordan du viser alle filer, der begynder med 'ad' i kataloget /usr/bin:
[tyge@hven MitKatalog]$ ls /usr/bin/ad* /usr/bin/addftinfo /usr/bin/addr /usr/bin/addr2line |
Det er værd at bemærke, at jokertegn ekspanderes af kommandofortolkeren - ikke af applikationen. Det har bl.a. den store fordel, at jokertegn altid fungerer - og fungerer konsistent på tværs af applikationer.
Et meget simpelt eksempel: Et katalog indeholder 3 filer: fil1, fil2 og ccc. Skriver du: ls f*, vil kommandofortolkeren først ekspandere f* og derefter kalde ls med: ls fil1 fil2. Output fra ls f* er blot:
[tyge@hven MitKatalog]$ touch fil1 fil2 [tyge@hven MitKatalog]$ ls ccc fil1 fil2 [tyge@hven MitKatalog]$ ls f* fil1 fil2 |
Men der er flere muligheder i dette. Et eksempel: For at se forskellen mellem fil1 og fil2 kan du skrive: diff fil1 fil2. Men du kan også nøjes med at skrive: diff f* og således lade kommandofortolkeren ekspandere f* til fil1 fil2. Da de to filer er ens (de indeholder ingenting nogen af dem), så er der ingen forskel, og derfor intet at vise.
[tyge@hven MitKatalog]$ diff f* [tyge@hven MitKatalog]$ |
Somme tider kan denne konsekvente ekspansion af joker-tegn dog være en ulempe.
Et tænkt eksempel: Et katalog indeholder 2 filer:
[tyge@hven film]$ ls dogme95.zip film_index.html |
Du kan også bruge zip-filer under Unix, og du kan se indholdet af zip-filen ved f.eks. at skrive:
[tyge@hven film]$ unzip -v d* Archive: dogme95.zip Length Method Size Ratio Date Time CRC-32 Name ------ ------ ---- ----- ---- ---- ------ ---- 14853 Defl:N 5224 65% 10-27-98 16:12 944a4af4 festen.html 14844 Defl:N 5401 64% 11-14-98 19:53 e55c1636 idioterne.html 1941 Defl:N 1024 47% 03-12-99 22:12 5ecb7d23 mifune.html ------ ----- --- ----- 31638 11649 63% 3 files |
Nu vil vi pakke festen.html ud af zip-filen. Det er den eneste fil i zip-filen, der starter med f, så under DOS kunne man blot skrive: unzip d* f*. Men prøver man det under Unix, går det galt:
[tyge@hven film]$unzip d* f* Archive: dogme95.zip caution: filename not matched: film_index.html |
Hvorfor det? Fordi der i kataloget i forvejen ligger en fil, der matcher f*, så vil kommandofortolkeren ekspandere både d* og f* og kalde unzip med: unzip dogme95.zip film_index.html.
Du bliver som minimum nødt til at skrive: unzip d* fe*. Der er ingen fil i kataloget, der matcher fe*, så kommandofortolkeren vil kun ekspandere d* og kalde unzip med: unzip dogme95.zip fe*. Det overlades nu til unzip at ekspandere fe*.
Alternativt kan man sætte en '\' foran stjernen og derved fortælle kommandofortolkeren at stjernen ikke skal ekspanderes. Altså: unzip d* f\*
Se også næste afsnit om regulære udtryk.
Det skal også nævnes, at hvis du kun vil finde et tegn, så brug et spørgsmålstegn. Vil du f.eks. finde alle filer aaa, baa, caa osv. men ikke caaa, så kan du bruge følgende
[tyge@hven MitKatalog]$ touch aaa baa caa caaa [tyge@hven MitKatalog]$ ls aaa baa caa caaa ccc fil1 fil2 [tyge@hven MitKatalog]$ ls ?aa aaa baa caa |