Find files containing multiple strings Find files containing multiple strings unix unix

Find files containing multiple strings


you can also try this;

find . -type f -exec grep -l 'string1' {} \; | xargs grep -l 'string2'

this shows file names that contain string1 and string2


You can chain your actions and use the exit status of the first one to only execute the second one if the first one was successful. (Omitting the operator between primaries defaults to -and/-a.)

find . -type f -exec grep -q 'string1' {} \; -exec grep -H 'string2' {} \;

The first grep command uses -q, "quiet", which returns a successful exit status if the string was found.


with GNU grep

grep -rlZ 'string1' | xargs -0 grep -l 'string2'


from man grep

-r, --recursive

Read all files under each directory, recursively, following symbolic links only if they are on the command line. Note that if no file operand is given, grep searches the working directory. This is equivalent to the -d recurse option.

-Z, --null Output a zero byte (the ASCII NUL character) instead of the character that normally follows a file name. For example, grep -lZ outputs a zero byte after each file name instead of the usual newline. This option makes the output unambiguous, even in the presence of file names containing unusual characters like newlines. This option can be used with commands like find -print0, perl -0, sort -z, and xargs -0 to process arbitrary file names, even those that contain newline characters.