If you use library find-dired+.el
(see also Locate Files Anywhere), then you can exclude any number of paths, and you can limit the depth.
find-grep-dired
is an interactive compiled Lisp function in
find-dired+.el
.
It is bound to menu-bar search find find-grep-dired, menu-bar subdir find find-grep-dired
.
(find-grep-dired DIR REGEXP &optional DEPTH-LIMITS EXCLUDED-PATHS)
Use Dired on the list of files in DIR
whose contents match REGEXP
.
The find
command run (after changing into DIR
) is essentially this,
where LS-SWITCHES
is (car find-ls-option)
:
find . \( -type f -exec grep grep-program find-grep-options \
-e REGEXP {} \; \) LS-SWITCHES
Thus REGEXP
can also contain additional grep options.
Optional arg DEPTH-LIMITS
is a list (MIN-DEPTH MAX-DEPTH)
of the
minimum and maximum depths. If nil
, search directory tree under DIR
.
**Optional arg EXCLUDED-PATHS
is a list of strings that match paths to
exclude from the search. If nil
, search all directories.
When both optional args are non-nil
, the find
command run is this:
find .
-mindepth MIN-DEPTH -maxdepth MAX-DEPTH
\( -path EXCLUDE1 -o -path EXCLUDE2 ... \)
-prune -o -exec grep-program find-grep-options -e REGEXP {} \;
LS-SWITCHES
where EXCLUDE1
, EXCLUDE2
... are the EXCLUDED-PATHS
, but shell-quoted.