哪个更有效地查找整个文件系统中的哪些文件包含字符串:递归 grep 或在 exec 语句中使用 grep 查找?我认为 find 会更有效,因为如果您知道文件扩展名或与文件名匹配的正则表达式,您至少可以进行一些过滤,但是当您只知道-type f哪个更好时?GNU grep 2.6.3;查找(GNU findutils)4.4.2
例子:
grep -r -i 'the brown dog' /
find / -type f -exec grep -i 'the brown dog' {} \;
考虑位于https://cloud.r-project.org/src/base/R-3/R-3.4.4.tar.gz的 R 源代码存储库。我将存储库解压缩到一个文件夹中。现在,我想知道目录中总共有多少行。所以,我尝试了以下命令:
find . -type f -exec wc -l {} \+
Run Code Online (Sandbox Code Playgroud)
产生 394968 但如果我尝试以下命令:
find . -type f -exec cat {} \+ | wc -l
Run Code Online (Sandbox Code Playgroud)
它产生 1848857!
为什么这两个看似相似的find命令操作会产生如此截然不同的结果?而且,查找行数的正确方法是什么,最好使用命令行实用程序而不是编写一个小工具的脚本?