我正在尝试在grep
由以下返回的指定文件中进行搜索find
:
find . -type d -name 'mydir*' -exec find '{}' -name '*.java' \; | grep 'MyClass'
Run Code Online (Sandbox Code Playgroud)
这不起作用。
同时,这有效。
grep 'MyClass' $(find . -type d -name 'mydir*' -exec find '{}' -name '*.java' \;)
Run Code Online (Sandbox Code Playgroud)
我的第一个例子有什么问题?
在第一种情况下,您 grep 返回find
的文件名列表,而在第二种情况下,文件名列表是 grep 的参数,因此 grep 将在文件内搜索。
管道是标准输入,而不是命名文件。这就是 grep 行为不同的原因。
来自man grep
:
grep 搜索命名输入文件(或标准输入,如果没有命名文件,或者如果给定单个连字符减号 (-) 作为文件名)中包含与给定 PATTERN 匹配的行。