This section summarizes the wildcards that are used for filename expansion. The shells use the same basic wildcards, though csh, tcsh, ksh, and bash have some extensions. Unless otherwise noted, assume that wildcards are valid for all shells.
*
Match zero or more characters. For example, a*
matches the files
a, ab, abc, abc.d, and so on.
?
Match exactly one character. For example, a?
matches
aa, ab, ac, etc.
[12..a..z]
Match any character listed in the brackets. For example,
a[ab]
matches aa or ab.
[a-z]
Match all characters between a and z. For example,
a[0-9]
matches a0, a1, and so on, up to a9.
[!ab..z]
Match any character that does not appear within the brackets.
For example, a[!0-9]
doesn't match a0, but does match aa.
bash, Korn, and newer Bourne shells only.
[^ab..z]
Match any character that does not appear within the brackets.
For example, a[^0-9]
doesn't match a0, but does match aa.
tcsh only.
{word1,word2...}
Match word1, word2, etc.
E.g.,
a_{dog,cat,horse}
matches
the filenames a_dog, a_cat, and a_horse.
bash and C shells only.
These (9.5)
actually aren't filename-matching wildcards.
They expand any string, including filenames that don't exist yet,
email addresses, and more.
?(abc)
Match zero or one instance of abc.
For example, x?(abc)x
matches xx or xabcx. Korn shell only.
*(abc)
Match zero or more instances of abc.
For example, x*(abc)x
matches xx, xabcx, xabcabcx, etc. Korn shell only.
+(abc)
Match one or more instances of abc.
For example, x+(abc)x
matches xabcx, xabcabcx, etc. Korn shell only.
!(abc)
Match anything that doesn't contain abc.
For example, x!(abc)x
doesn't match xabcx or xabcabcx, but does match
practically anything else that begins or ends with x.
Korn shell only.
^
pat
Match any name that doesn't match pat
.
pat
must include at least one of the wildcards *
, ?
and []
.
To match all except a single name, here's a trick:
put brackets around one character.
For instance, you can match all except abc with ^ab[c]
.
tcsh only.
(For other shells, see
nom (15.9).)
Note: wildcards do not match files whose names begin with a
dot (.
), like .cshrc.
[1]
This prevents you from
deleting (or otherwise mucking around with) these files by accident.
To match those files, type the dot literally.
For example, .[a-z]*
matches anything whose name starts with a
dot and a lowercase letter.
Watch out for plain .*
, though; it matches the directory entries
.
and ..
(see article
15.5
for suggestions on solving that problem).
[1] Setting the bash variable glob_dot_filenames includes these names in wildcard expansion.
And a final note: many operating systems (VAX/VMS and
DOS included)
consider a file's name and extension to be different
entities; therefore, you can't use a single wildcard to match both.
What do I mean? Consider the file abc.def.
Under DOS or VMS, to match
this filename you'd need the wildcard expression *.*
. The first
*
matches the name (the part before the period), and the second matches
the extension (the part after the period).
Although UNIX uses extensions, they aren't considered
a separate part of the filename, so a single *
will match the
entire name.
-
,