Вы почти поняли это ...
find . -type f -iname "*.java" -print0 | xargs -0 grep -v "something something"
Точка "." говорит начать отсюда. (твое подразумевает это .. но никогда не предполагайте).
-iname использует поиск без учета регистра, на всякий случай (или просто без учета регистра).
-print0 отправляет имена файлов в xargs с последним символом \ x00, что предотвращает проблемы с именами файлов, в которых есть пробелы.
'-0' в xargs говорит, что нужно ожидать имена файлов, заканчивающиеся на \ x00, вместо возвратов.
и ваша команда grep ...
В значительной степени получил это.
РЕДАКТИРОВАТЬ::
Из вашего обновления:
find . -type f -iname "*pb.java" -print0 | xargs -0 grep -iL "something"
должно помочь (Добавлено -L из ответа @ rush, хорошая работа)
Я понял, что вашему grep нужна либо опция -i, либо менее явный.
Попробуй команду по частям ... ДЕЙСТВИТЕЛЬНО ЛИ ВЫВОДНЫЕ имена файлов кажутся правильными?
find . -type f -iname "*pb.java"
Если это так, то, скорее всего, ваша проблема либо в том, что ваш шаблон поиска grep не соответствует (орфографическая ошибка? Это происходит!), Либо просто нет совпадений.
Абсолютный худший случай:
grep -riL "something" *
выполнит ОЧЕНЬ больше работы, ища все, но должно дать вам некоторый вывод.