linux + 在目录下的文件中查找单词/字符串

linux + 在目录下的文件中查找单词/字符串

我有以下命令

find /var -type f -exec grep "param1" {} \; -print

使用此命令,我可以在 /var 下的任何文件中找到 param1 字符串,但这所需的时间很长。

我需要另一种可能性来在文件中查找字符串但比我的例子快得多

答案1

您可以尝试直接使用 grep,如下所示

grep -R "param1" /var/*

答案2

快速搜索主要是通过内容的“索引”来实现的,这是一种“查找表”。有些免费的搜索引擎会建立输入文件的索引,并为您提供非常快速的结果:

我怀疑你是否想这么做,但只是为了给你另一个选择:)

答案3

这里有几个因素在起作用:

第一的通过使用-exec,find 会为grep它找到的每个文件生成一个新进程。

这可以通过使用 xargs 来实现,就像 Felipe Alvarez 的回答中那样(我写了一个博客文章关于这个 5 年多前)或使用-exec grep param1 {} +(注意用+而不是\;)。使用 时+,“命令行是通过在末尾附加每个选定文件名来构建的;命令的总调用次数将远远少于匹配文件的数量”(来自查找手册页

第二,下的文件数量和大小/var可能非常大。

除了-type f限制搜索的文件之外,您还可以添加参数吗?find有按时间、所有者、名称模式等限制的选项。例如,您可以执行以下操作:

find /var -type f -name "access*log" -mtime -7 -exec grep param1 {} +

这将查找过去 7 天内修改过的文件,其名称以“access”开头,以“log”结尾。只有匹配的文件才会成为 exec/grep 的一部分。

答案4

我建议使用:

grep -RInis "param1" /var

有关详细信息,请参阅

man grep

如果速度如此重要,您可能需要考虑 fgrep,但根据实施情况,它可能不会更快。

相关内容