Bestandsnaam uitbreiding ("Wildcards")

Vaak wil je dat een opdracht op een groep bestanden werkt. "Wildcards" worden gebruikt om een bestandsnaam-uitbreidingspatroon aan te maken: een serie tekens en wildcards wat tot een lijst met bestandsnamen wordt uitgewerkt. Het patroon /etc/* wordt bijvoorbeeld uitgebreid tot een lijst met alle bestanden in /etc [1]* is een wildcard die voor iedere serie tekens kan staan, dus het patroon /etc/* zal worden uitgewerkt tot een lijst met alle bestandsnamen die met /etc/ beginnen.

Deze lijst met bestanden is vooral handig als een set argumenten voor een opdracht. Als voorbeeld, de /etc directory bevat een serie subdirectory's genaamd rc0.d, rc1.d, enz. Om hiervan de inhoud te bekijken, zou je normaal gesproken typen:
ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d

Dit is langdradig. In plaats daarvan kun je de ? wildcard gebruiken:
ls /etc/rc?.d

/etc/rc?.d wordt uitgewerkt tot een lijst met bestandsnamen die beginnen met rc, gevolgd door elk enkel teken, gevolgd door .d.

Beschikbare wildcards zijn:

*

Komt overeen met iedere groep bestaande uit 0 of meer tekens.

?

Komt overeen met exact één teken.

[...]

Als je een aantal tekens in blokhaken omsluit, is het resultaat een wildcard welke overeenkomt met die tekens. [abc] komt bijvoorbeeld overeen met zowel a, als b, als c. Als je na de eerste blokhaak een ^ toevoegt, wordt de betekenis omgedraaid; dus [^abc] komt overeen met elk teken dat geen a, b, of c is. Je kunt een bereik opnemen, zoals [a-j], welke overeenkomt met alles tussen een a en een j. De overeenkomst is hoofdlettergevoelig, dus je moet [a-zA-Z] opgeven om alle tekens toe te staan.

Uitbreidingspatronen zijn simpel, zodra je wat concrete voorbeelden hebt gezien:

*.txt

Hiermee krijg je een lijst met bestandsnamen die eindigen op .txt, aangezien de * met werkelijk alles overeenkomt.

*.[hc]

Dit geeft je een lijst met bestandsnamen die eindigen op .h of .c.

a??

Dit geeft je alle bestandsnamen bestaande uit drie letters die met een a beginnen.

[^a]??

Dit geeft je alle bestandsnamen bestaande uit drie letters die niet beginnen met een a.

a*

Dit geeft je iedere bestandsnaam die begint met een a, ongeacht uit hoeveel tekens de bestandsnaam bestaat.

Noten

[1]

In werkelijkheid worden bestanden beginnend met een . niet in de uitwerking van * opgenomen.