Filename Generation: Operators and Qualifiers
The following strings are used to match filenames:
* Matches any string, including the null string.
? Matches any 1 character.
[...] Matches any of the enclosed characters.
- Ranges of characters can be specified by separating two chars with
a '-'.
- A ']' or a '-' may be matched by including it as the first character
in the list.
- There are several character classes that can be specified in the form
[:CLASS:]. Note that the brackets are in ADDITION to the ones
for specifying a range of characters.
Here is a list of classes:
[:alnum:] alphanumeric
[:alpha:] alphabetic
[:blank:] space or tab
[:cntrl:] control character
[:digit:] decimal digit
[:graph:] printable character except whitespace
[:lower:] lowercase letter
[:print:] printable character
[:punct:] printable character neither alphanumeric nor whitespace
[:space:] whitespace character
[:upper:] uppercase letter
[:xdigit:] hexadecimal digit
These use macros provided by the OS.
[^...]
[!...] Just like [...], but matches any character NOT in the set.
<[x]-[y]>
Matches any number in the range x to y, inclusive.
Either of the numbers may be omitted to make the range
open-ended; hence `<->' matches any number.
(...)
Matches the enclosed pattern. This is used for group-
ing.
x|y Matches either x or y. This operator has lower pre-
cedence than any other. The `|' character must be
within parentheses, as in a grouped
pattern above, to avoid interpretation as a pipeline.
^x (Requires EXTENDED_GLOB to be set.) Matches anything
except the pattern x. This has a higher precedence
than `/', so `^foo/bar' will search directories in `.'
except `./foo' for a file named `bar'
x~y (Requires EXTENDED_GLOB to be set.) Match anything
that matches the pattern x but does not match y. This
has lower precedence than any operator except `|', so
`*/*~foo/bar' will search for all files in all direc-
tories in `.' and then exclude `foo/bar' if there was
such a match. It groups left-to-right, so multiple
patterns can be excluded by `foo~bar~baz'. In the
exclusion pattern (y), `/' and `.' are not treated spe-
cially the way they usually are in globbing.
x# (Requires EXTENDED_GLOB to be set.) Matches zero or
more occurrences of the pattern x. This operator has
high precedence; `12#' is equivalent to `1(2#)', rather
than `(12)#'.
x## (Requires EXTENDED_GLOB to be set.) Matches one or
more occurrences of the pattern x. This operator has
high precedence; `12##' is equivalent to `1(2##)',
rather than `(12)##'.
Qualifiers
Perhaps you don't want every file returned by a match.
For example, maybe you want directories omitted. Zsh offers an
impressive number of qualifiers to limit what filenames are matched by
a pattern. You should surround this list of qualifiers by parenthesis.
/ directories
. plain files
@ symbolic links
= sockets
p named pipes (FIFOs)
* executable plain files (0100)
% device files (character or block special)
%b block special files
%c character special files
r owner-readable files (0400)
w owner-writable files (0200)
x owner-executable files (0100)
A group-readable files (0040)
I group-writable files (0020)
E group-executable files (0010)
R world-readable files (0004)
W world-writable files (0002)
X world-executable files (0001)
s setuid files (04000)
S setgid files (02000)
t files with the sticky bit (01000)
ddev files on the device dev
l[-|+]ct
files having a link count less than ct (-), greater than ct
(+), or is equal to ct
U files owned by the effective user ID
G files owned by the effective group ID
uid files owned by user ID id if it is a number, if not, than the
character after the `u' will be used as a separator and the
string between it and the next matching separator (`(', `[', `{',
and `<' match `)', `]', `}', and `>' respectively, any other
character matches itself) will be taken as a user name, and the
user ID of this user will be taken (e.g. `u:foo:' or `u[foo]' for
user `foo')
gid like uid but with group IDs or names
a[Mwhm][-|+]n
files accessed exactly n days ago. Files accessed within the
last n days are selected using a negative value for n (-n).
Files accessed more than n days ago are selected by a positive n
value (+n). Optional unit specifiers `M', `w', `h' or `m' (e.g.
`ah5') cause the check to be performed with months (of 30 days),
weeks, hours, or minutes instead of days, respectively. For
instance, `echo *(ah-5)' would echo files accessed within the
last five hours.
m[Mwhm][-|+]n
like the file access qualifier, except that it uses the file
modification time.
c[Mwhm][-|+]n
like the file access qualifier, except that it uses the file
inode change time.
L[+|-]n
files less than n bytes (-), more than n bytes (+), or exactly n
bytes in length. If this flag is directly followed by a `k'
(`K'), `m' (`M'), or `p' (`P') (e.g. `Lk-50') the check is
performed with kilobytes, megabytes, or blocks (of 512 bytes)
instead.
^ negates all qualifiers following it
- toggles between making the qualifiers work on symbolic links (the
default) and the files they point to
M sets the MARK_DIRS option for the current pattern
T appends a traling qualifier mark to the file names, analogous to
the LIST_TYPES option, for the current pattern (overrides M)
N sets the NULL_GLOB option for the current pattern
D sets the GLOB_DOTS option for the current pattern
More than one of these lists can be combined, separated by commas. The
whole list matches if at least one of the sublists matches (they are
`or'ed, the qualifiers in the sublists are `and'ed).
If a `:' appears in a qualifier list, the remainder of the expression
in parenthesis is interpreted as a modifier (see the section
`Modifiers' in the section `History Expansion').