How to find text files not containing text on Linux?

How do I find files not containing some text on Linux? Basically I'm looking for the inverse of the following

find . -print | xargs grep -iL "somestring"

Solution 1:

The command you quote, ironically enough does exactly what you describe. Test it!

echo "hello" > a
echo "bye" > b
grep -iL BYE a b

Says a only.


I think you may be confusing -L and -l

find . -print | xargs grep -iL "somestring"

is the inverse of

find . -print | xargs grep -il "somestring"

By the way, consider

find . -print0 | xargs -0 grep -iL "somestring"

Or even

grep -IRiL "somestring" .

Solution 2:

You can do it with grep alone (without find).

grep -riL "somestring" .

This is the explanation of the parameters used on grep

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

If you use l lowercase you will get the opposite (files with matches)

     -l, --files-with-matches
             Only the names of files containing selected lines are written

Solution 3:

Find the markdown file through find and grep to find the mismatch

$ find. -name '* .md' -print0 | xargs -0 grep -iL "title"

Directly use grep's -L to search for files that only contain markdown files and no titles

$ grep -iL "title" -r ./* --include '* .md'