At the moment I'm using two commands, I'm sure there must be a better way...

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset
  • 1
    does -name '*.[ch]' work? – glenn jackman Aug 25 '11 at 14:40

ack (or, on Debian/Ubuntu, ack-grep) will ignore non-source files like version control or binaries. Very useful.

to search just .c and .h files, as above:

ack-grep -i --cc "invalid preset"

the --cc (the longer form is --type cc) only looks at .c .h & .xs files. The full list of filetypes is viewable with ack-grep --help type. Most of the time, you won't particularly need the --type, as it will generally only have the files to search, and then files you won't see by default, like binaries, backups and version control files.

|improve this answer|||||

The grep program itself can search recursively and also accepts an option to search only certain files. The following is equivalent to your two find commands.

grep -Ri --include=*.[ch] invalid\ preset .
|improve this answer|||||
  • This worked for me when I got rid of the brackets – Mike Oct 31 '15 at 22:48

The find command can call grep itself.

find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print

and variations of thereof.

|improve this answer|||||
  • Changed it to the obvious variation. ;-) – Keith Aug 25 '11 at 8:35

I can add something like this to your ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
|improve this answer|||||

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.