find / grep列出找到的包含特定字符串的特定文件

时间:2017-06-09 14:15:54

标签: bash shell command-line grep

我有一个根目录,我需要运行find和/或grep命令来返回包含特定字符串的文件列表。

以下是设置文件和目录的示例。实际上,这个根目录包含很多子目录,每个子目录都有很多子目录和文件,但是我希望这个例子可以解释我的观点。

enter image description here

从root用户开始,我需要遍历每个子目录,特别是在subdir /中,并通过file.html查找字符串"例如:"。如果找到了结果,我希望打印出file.html的完整路径,例如website_two / subdir / file.html。

我认为将搜索限制为subdir / file.html会大大提高此操作的速度。

我对查找和grep命令知之甚少,但我没有运气就尝试过以下操作,但老实说,我不知道如何排除故障。

find . -name "file.html" -exec grep -HI "example:" {} \;

编辑:我知道这可能被标记为重复,但我认为我的问题更多的是如何告诉命令只搜索特定路径中的特定文件,循环遍历所有root->级别目录。

1 个答案:

答案 0 :(得分:0)

find ./ -type f -iname file.html -exec grep -l "example:" {} \+;

grep -Rl "example:" ./ | grep -iE "file.htm(l)*$"可以解决问题。

引自GNU Grep 2.25手册页:

  -R, --dereference-recursive
         Read all files under each directory, recursively.  Follow all symbolic links, unlike -r.

  -l, --files-with-matches
         Suppress normal output; instead print the name of each input file from which output would normally have
         been printed.  The scanning will stop on the first match.

 -i, --ignore-case
         Ignore case distinctions in both the PATTERN and the input files.

 -E, --extended-regexp
         Interpret PATTERN as an extended regular expression.