Recursive Find from Command Line

By  on  

Probably a dozen times a day I need to search any given project for specific code keywords.  Most of the time it's within a specific project but then there are times where I don't remember which directory or project the specific text is -- from my blog to my many Mozilla projects, I have code all over my local machine and it's oftentimes difficult to find something I need.

Most of the time I need to open my text editor and have it do the hard work of what I'm looking for but that's probably not efficient -- a more efficient tool would come from command line and thanks to CommandLineFu.com, I found the perfect command:

# Search all ".js" files for "debounce"
# Spits out file path, line number, and snippet where string appears
find . -name "*.js" -exec grep -in -H "debounce" {} \;

The command above searches files recursively to find the desired string, outputting the source file and the text which the string occurs in!

Recent Features

Incredible Demos

  • By
    Control Element Outline Position with outline-offset

    I was recently working on a project which featured tables that were keyboard navigable so obviously using cell outlining via traditional tabIndex=0 and element outlines was a big part of allowing the user navigate quickly and intelligently. Unfortunately I ran into a Firefox 3.6 bug...

  • By
    MooTools Zebra Tables Plugin

    Tabular data can oftentimes be boring, but it doesn't need to look that way! With a small MooTools class, I can make tabular data extremely easy to read by implementing "zebra" tables -- tables with alternating row background colors. The CSS The above CSS is extremely basic.

Discussion

  1. Vladimir

    Recently I’m using:

    grep 'term' -r ./

    I think grep also has an option to filter on file extension too and I use it sometimes, but I don’t know it by heart.

  2. The output on this looks pretty must the same as with the functionality already built into grep using the -r and --include flags. I also tend to add the -n flag to output the line numbers as well. I believe this should line be equivalent.

    grep -rin --include="*.js" "debounce" .
  3. The find trick was one I learned at university in the 1990s, when most greps didn’t have the recursive flag. My vague recollection is that GNU grep introducing -r gave much of the competition a bit of a kick up the arse, and now it’s fairly common, but the find trick is still useful on older or more obscure Unix platforms…

  4. Jeremy

    Pretty sure you have a typo in there. “*.[js]” means “*.j” or “*.s”, which is likely to find nothing.

    • Good point — left some testing in there. Updated!

  5. Check out Ack (http://beyondgrep.com/why-ack/).

    ack debounce
    • Oh, you were filtering for JavaScript files only. That’s as easy as

      ack debounce --type=js

      :-)

  6. Isaiah

    Wasn’t able to execute this through the command line: Err find: missing argument to `-exec'

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!