find . -name "*.java" -exec grep "foo" {} \;
Run Code Online (Sandbox Code Playgroud)
这只是打印匹配,没有文件名。
find . -name "*.java" -exec grep "foo" /dev/null {} \;
Run Code Online (Sandbox Code Playgroud)
但这也会打印文件名。
为什么?当 /dev/null 插入混合时,导致文件名打印的 find/grep 机制是什么?
PS - 是的,我知道我可以做“grep -H”
如果您既不使用 -h 也不使用 -H 选项,则当多个文件作为参数给出时,grep 将写出文件名。因此,如果您将 /dev/null 作为参数添加到 grep,您将始终拥有多个,因此将始终写入文件名。但是,是的,使用 ? grep -H是始终写入文件名的最安全方法。