Grep in Files with a Specific Extension Under a Directory

Is there a command that allows searching a keyword in files under a directory with specific extension ?

The string grep -irn "string" ./path gives a recursive search for all files under the directory./path. My specific requirement is to search in all files under ./path with an extension such as *.h

6 Answers

After some trials, I think grep -irn 'string' --include '*.h' is more handy

3

Set (turn on) the shell option globstar with the command

    shopt -s globstar

This will cause ** as a filename component to mean everything here and below.  So path/** means everything in the path directory and its subdirectories.  (You don't need to type ./ here.)  Then you can use

grep -in "string" path/**/*.h

to search all the .h files in and under path.


You can unset options with shopt -u.

find /path -iname "*.h" -exec grep -inH "string" "{}" \;
2

If you can install something on your machine, I suggest using ack.

You can do exactly what you need with it and much more. For your use case, you can do:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh filters on h files
  • -i ignores the case

To find which file filters are supported natively, run the command ack --help=type.

2

What about this one?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Explanation:

  • -L : follow symlinks
  • -name : using the asterisk, you can describe extensions
  • -in : same as your proposal, but the 'r' is replaced by the find command
  • {} : this stands for the result of the find command
  • \; : in case you combine find with -exec, this is the end-of-command specifier
2

If you're using gnu grep then it's got a flag that does exactly what you want:

grep -irn --include=\*.h "string" path

although I don't think it's available in other greps.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article
Twitter Facebook Pinterest