30.16 Dired and find
You can select a set of files for display in a Dired buffer more flexibly by using the find
utility to choose the files.
To search for files with names matching a wildcard pattern use M-x find-name-dired
. It reads arguments directory
and pattern
, and chooses all the files in directory
or its subdirectories whose individual names match pattern
.
The files thus chosen are displayed in a Dired buffer, in which the ordinary Dired commands are available.
If you want to test the contents of files, rather than their names, use M-x find-grep-dired
. This command reads two minibuffer arguments, directory
and regexp
; it chooses all the files in directory
or its subdirectories that contain a match for regexp
. It works by running the programs find
and grep
. See also M-x grep-find
, in Grep Searching. Remember to write the regular expression for grep
, not for Emacs. (An alternative method of showing files whose contents match a given regexp is the % g regexp
command, see Marks vs Flags.)
The most general command in this series is M-x find-dired
, which lets you specify any condition that find
can test. It takes two minibuffer arguments, directory
and find-args
; it runs find
in directory
, passing find-args
to tell find
what condition to test. To use this command, you need to know how to use find
.
The format of listing produced by these commands is controlled by the variable find-ls-option
. This is a pair of options; the first specifying how to call find
to produce the file listing, and the second telling Dired to parse the output.
The command M-x locate
provides a similar interface to the locate
program. M-x locate-with-filter
is similar, but keeps only files whose names match a given regular expression.
These buffers donโt work entirely like ordinary Dired buffers: file operations work, but do not always automatically update the buffer. Reverting the buffer with g
deletes all inserted subdirectories, and erases all flags and marks.