locate
and all the "fast find" commands I've used can match shell wildcards (
Section 1.13) (*
, ?
, [ ]
). If you use a wildcard
on one end of the pattern, the search pattern is automatically "anchored" to the
opposite end of the string (the end where the wildcard isn't). The shell matches
filenames in the same way.
The difference between the shell's wildcard matching and locate
matching is that the shell treats slashes
(/
)
in a special manner: you have to type them as part of the expression. In
locate, a wildcard matches slashes and
any other character. When you use a wildcard, be sure to put quotes around the
pattern so the shell won't touch it.
Here are some examples:
To find any pathname that ends with bin:
% locate '*bin'
/bin
/home/robin
/home/robin/bin
...
To find any pathname that ends with /bin (a good way to find a file or directory named exactly bin):
% locate '*/bin'
/bin
/home/robin/bin
/usr/bin
...
Typing locate '*bin*'
is the same
as typing locate bin
.
To match the files in a directory named bin, but not the directory itself, try something like this:
% locate '*/bin/*'
/bin/ar
/bin/cat
...
/home/robin/bin/prog
To find the files in /home whose
names end with a tilde (~
) (these are
probably backup files from the Emacs editor):
% locate '/home/*~'
/home/testfile~
/home/allan/.cshrc~
/home/allan/.login~
/home/dave/.profile~
...
Notice that the locate asterisk matches dot files, unlike shell wildcards.
The question mark (?
) and square
brackets ([ ]
) operators work, too.
They're not quite as useful as they are in the shell because they match
the slashes (/
) in the pathnames.
Here are a couple of quick examples:
%locate '????'
/bin /etc /lib /src /sys /usr %locate '/[bel]??'
/bin /etc /lib
— JP