如果要查看文件名和行号,POSIXly:
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
Run Code Online (Sandbox Code Playgroud)
(您不想在;
这里使用它会grep
为每个文件运行一个)。这是 GNUism 的标准等价物:
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
Run Code Online (Sandbox Code Playgroud)
find
(在第一个),xargs
(在第二个)将传递尽可能多的参数,grep
而不会超过您可以传递给命令的参数数量的限制。在进行拆分时,可能会发生最后一次运行时只传递一个参数的grep
情况,在这种情况下grep
不会打印文件名。这就是为什么你需要/dev/null
那里(或-H
使用 GNU grep
)。
使用-type f
,我们只考虑常规文件(不是设备、符号链接、管道、目录……)。
如果你想使用 GNUisms,你可以使用 GNU 的grep
能力来降低目录树:
grep -rHnF --include='CMake*' version .
Run Code Online (Sandbox Code Playgroud)
您不想使用-R
因为这会导致grep
在下降目录树并从设备、fifos、套接字读取时遵循符号链接...
该版本更安全、更高效,但不便于携带。