6.6 Filename Expansion

Often you want a command to work with a group of files. _Wildcards_

are used to create a _filename expansion pattern:_ a series of

characters and wildcards that expands to a list of filenames. For

example, the pattern

/etc/* expands to a list of all[2]

the files in /etc.

[2] Actually, files beginning with . are not included in the expansion

of *.

* is a wildcard that can stand for any series of characters, so the

pattern /etc/* will expand to a list of all the filenames beginning

with

/etc/.

/

/

/

This filename list is most useful as a set of arguments for a

command. For example, the /etc directory contains a series of

subdirectories called rc0.d, rc1.d, etc. Normally to view the

contents of these, you would type the following:

ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d

ls /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d

This is tedious. Instead, you can use the ? wildcard as shown here:

ls /etc/rc?.d

/etc/rc?.d expands to a list of filenames that begin with rc,

/followed by

any single character, followed by .d.

Available wildcards include the following:

* Matches any group of 0 or more characters.

? Matches exactly one character.

[...] If you enclose some characters in brackets, the result is a

wildcard that matches those characters. For example, [abc] matches

either a, or b, or c. If you add a ^ after the first bracket, the

sense is reversed; so [^abc] matches any character that is not a, b,

or c. You can include a range, such as [a-j], which matches anything

between a and j. The match is case sensitive, so to allow any

letter, you must use [a-zA-Z].

Expansion patterns are simple once you see some concrete examples:

*.txt This will give you a list of all filenames that end in .txt,

since the * matches anything at all.

*.[hc] This gives a list of filenames that end in either .h or .c.

a?? This gives you all three-letter filenames that begin with a.

[^a]?? This gives you all three-letter filenames that do not begin

with a.

a* This gives you every filename that starts with a, regardless of

how many letters it has.

Debian GNU/Linux : Guide to Installation and Usage · 第 103 / 193 题