Search all files for two strings

To search the current directory for all files that contain two independent strings, you can use the following terminal command:

grep -lr "common" $(grep -lr "rare" .)

In essence, this is saying "Recursively find all the files in the current directory with the string rare, and then look through those files to find any with the string common.

Depending on the directory, you may want to limit the number of directories that grep has to inspect. For me, that often includes directories like node_modules/ and cache. Here’s the same command with a few excluded directories:

grep -lr "common" $(grep -lr --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=build --exclude-dir=cache "rare" .)

The order of the strings does matter, but putting the less commonly occurring string second is a little more efficient.

Happy searching!


My name is Sean McPherson (SeanMcP), and I am a software engineer based in Pittsburgh, PA. Here I write articles about programming for developers of all levels.