Puedes hacerlo solo con grep (sin buscar).
grep -riL "somestring" .
Esta es la explicación de los parámetros usados en grep
-L, --files-without-match
each file processed.
-R, -r, --recursive
Recursively search subdirectories listed.
-i, --ignore-case
Perform case insensitive matching.
Si usa l
minúsculas obtendrá lo contrario (archivos con coincidencias)
-l, --files-with-matches
Only the names of files containing selected lines are written
El comando que cita, irónicamente, hace exactamente lo que describe. ¡Pruébelo!
echo "hello" > a
echo "bye" > b
grep -iL BYE a b
Dice un solo.
Creo que puedes estar confundiendo -L y -l
find . -print | xargs grep -iL "somestring"
es el inverso de
find . -print | xargs grep -il "somestring"
Por cierto, considera
find . -print0 | xargs -0 grep -iL "somestring"
O incluso
grep -IRiL "somestring" .