right now i am using something like this:

find . -name "*.xml" | xargs grep -l "foobar"

it works, but i was wondering if grep has this functionality built in?


POSIX grep doesn't have such options, but coreutils grep does.

grep -r --include='*.xml' -l foobar .

should do it.

FreeBSD grep (and OS X) appear to have the same thing, Solaris & AIX lack them AFAICT.


You could also do:

find . -name "*.xml" -exec grep -l "foobar" {} \;
  • 1
    yeah i used that originally but then switched to xargs because its faster – numan May 19 '12 at 21:05

You can use ack where that command would be

ack --xml -l foobar

Note that ack's filetypes mean that it doesn't just consider *.xml files. Any file with the extension .xml, .dtd, .xsl, .xslt, or .ent will be selected for searching under the --xml flag. See ack --help-types for a list of types and extensions.

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.