Die traditionelle UNIX-Antwort wäre diejenige, die für diese Frage akzeptiert wurde:
find . -name '*.java' | xargs grep -l 'string'
Dies wird wahrscheinlich für Java-Dateien funktionieren, aber Leerzeichen in Dateinamen sind auf Mac viel häufiger als in der traditionellen UNIX-Welt. Wenn Dateinamen mit Leerzeichen durch die Pipeline geleitet werden, interpretiert xargs die einzelnen Wörter als verschiedene Namen.
Was Sie wirklich wollen, ist die Trennung der Namen, um die Grenzen eindeutig zu machen:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Die Alternative ist, find run grep für Sie ausführen zu lassen, wie Mark vorschlägt, obwohl dieser Ansatz langsamer ist, wenn Sie eine große Anzahl von Dateien durchsuchen (da grep einmal pro Datei und nicht einmal mit der gesamten Liste der Dateien aufgerufen wird).