Using grep to search a repository

Mel fbsd.questions at rachie.is-a-geek.net
Tue Nov 11 12:37:25 PST 2008


On Tuesday 11 November 2008 20:56:41 Frédéric Perrin wrote:
> Le Mardi 11 à 19:36, Mel a écrit :
> > On Tuesday 11 November 2008 19:17:28 Aggelidis Nikos wrote:
> >> Hi to all the list,
> >>
> >> i have a project with a lot of bash scripts in a folder hierarchy.I
> >> haven't wrote the project myself so many times i have to search for
> >> the definition of a function. For this purpose i decided to use grep
> >> {recursively}.
> >> The problem is that the project is an svn repository... so grep
> >> returns results from .svn and it is really messes up the outcome of
> >> grep. I tried bypassing the problem using the `--exclude=file_pattern'
> >> but since its use is for files not directories it doesn't work.... So
> >> the questions are:
> >>
> >> 1) Can i bypass certain directories{i.e. '.svn' or 'log/'}, using
> >> grep? {or a combination of tools + grep}
> >
> > man find(1), specifically -path and -exec arguments. Example:
> >
> > find . -type f \( \! -path '*/.svn/*' -a \! -path '*/log/*' \) \
> > 	-exec grep foo {} +
>
> FWIW, when doing a similar search, the command built by emacs is (a
> longer version of) the following :
>
> find . \( -path \*/.svn -o -path \*/log \) -prune -o -type f \( -name
> \*.sh\* \) -exec grep -i -nH -e pattern {} /dev/null \;
>
> Isn't "-path .svn -prune" more efficient than "! -path .svn"? I mean,
> with the second one, won't find also descend into .svn folders, only to
> find that all files have a path containing .svn?

Yes, you are correct. It's merely habit that I use ! -path vs -prune.

Tip:
The microseconds you win by using prune are insignificant to the minutes you 
add by ending with a semicolon, rather then a + sign.
With a semi-colon, a fork is done for each positive match. With a plus sign 
matches are bundled till the max command length is met.

-- 
Mel

Problem with today's modular software: they start with the modules
    and never get to the software part.


More information about the freebsd-questions mailing list