Prawie masz to naprawdę ...
find . -type f -iname "*.java" -print0 | xargs -0 grep -v "something something"
Kropka '.' mówi, żeby zacząć od tego miejsca. (twoje implikuje to ... ale nigdy nie zakładaj).
-iname używa wyszukiwania bez rozróżniania wielkości liter, na wszelki wypadek (lub po prostu nie na wielkość liter).
-print0 wysyła nazwy plików do xargs ze znakiem końcowym \ x00, co zapobiega problemom z nazwami plików zawierającymi spacje.
„-0” na xargs mówi, że oczekuje nazw plików kończących się na \ x00 zamiast zwrotów.
i twoje polecenie grep ...
Prawie to mam.
EDYTOWAĆ::
Z twojej aktualizacji:
find . -type f -iname "*pb.java" -print0 | xargs -0 grep -iL "something"
powinno pomóc. (Dodano -L z odpowiedzi @ rush, dobra robota)
Rozumiem, że twój grep potrzebuje albo opcji „-i”, albo by był mniej wyraźny.
Spróbuj wykonać polecenie w częściach ... czy WYJŚCIE nazwy plików wyjściowych wydają się prawidłowe?
find . -type f -iname "*pb.java"
Jeśli tak, oznacza to, że problem prawdopodobnie nie pasuje do wzorca wyszukiwania grep (błąd pisowni? To się zdarza!) Lub po prostu nie ma żadnych dopasowań.
Absolutnie najgorszy przypadek:
grep -riL "something" *
wykona dużo więcej pracy, szukając wszystkiego, ale powinien dać ci pewien efekt.