我如何在其文件内容中找到包含一个特定的文本序列的所有文件?

下一个不起作用. 它似乎显示系统中的每个单一文件。

find / -type f -exec grep -H 'text-to-find-here' {} \;

当前回答

正如彼得在以前的回答中提到的那样,所有以前的回答都建议抓住并找到。

但有一个更复杂的方式使用Gnome Commander与完美的GUI和数以百万计的选项自2001年以来,并找到文件只是其中之一。

其他回答

我认为值得提到你如何找到:

所有包含至少一个文本的文件,其中包括大量的文本:

grep -rlf ../patternsFile.txt .

出口:

./file1  
./file2
./file4

上述,由每个文本组成:

cat ../patternsFile.txt | xargs -I{} sh -c "echo {}; grep -rl \"{}\" ."

出口:

pattern1
./file1  
./file2
pattern2
./file1  
./file4
pattern3
./file1  
./file2
./file4

请注意,为了不匹配模式File.txt本身,您需要添加一个目录(如上面的示例所示)。


如果使用在您的例子中找到相似的,最好添加 -s ( - 没有消息) 捕捉,并在命令结束时 2>/dev/null 避免大量的许可拒绝的消息由捕捉发送,并找到:

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

更快、更容易的工具在同一用途中存在 - 请参见下面. 最好尝试它们,只要它们在您的平台上可用,当然:

更快、更容易的替代品

RipGrep - 最快的搜索工具周围:

rg 'text-to-find-here' / -l

ag 'text-to-find-here' / -l

ACK:

ack 'text-to-find-here' / -l


警告:除非你真的不能避免,不要从“/”(根目录)搜索,以避免漫长而不有效的搜索!因此,在上面的例子中,你最好用一个子目录名称替换“/”,例如“/home”取决于你实际上想要搜索的地方。

重复和案例不敏感的捕捉与线号:

grep -inr "Text" folder/to/be/searched/

我尝试了下面的捕捉命令,它有助于在 /etc/yum.repos.d 我的存储库中搜索内容。

grep -Ril -e 'texttoSearch' /etc/yum.repos.d

安德鲁·加兰特的博客声称:“Ripgrep 比 {grep, ag, git grep, ucg, pt, sift} 更快”(一些人分享的声明,这就是为什么一个功能比较是有用的)。 特别有兴趣的是他关于 regex 实施和漏洞的部分. 下一个命令搜索所有文件,包括隐藏和可执行: $ rg -uuu foobar 银搜索器(ag)声称它是 5-10 倍的速度。

虽然可以扫描外部程序,执行搜索,阻止其输出并处理它,呼叫API是电源和性能的途径。