获取模式给定目录中包含给定文本的文件列表

Get list of files that contain given text within directory given by pattern

我想获取我的文件系统中包含给定文本的文件列表。此外,仅应考虑位于模式给定的目录中的文件。

假设我的文件系统中有许多名为 myDir 的目录,如下所示:

/usr
  /myDir
/tmp
  /myDir
  /anotherDir

现在我想获取那些包含文本的目录中的所有文件。

所以基本上我需要执行这些步骤:

  1. 循环整个文件系统上的所有目录名称myDir
  2. 对于该列表中的每个目录,获取包含搜索字符串的文件

到目前为止我尝试的是find /etc /opt /tmp /usr /var -iname myDir -type d -exec ls -exec grep -l "SearchString" {} \;

但是这不起作用,因为 find 的结果是我不能用作 grep 输入的目录。我假设我必须在 findgrep 之间执行一步,但不知道如何执行此操作。

我想我明白了,将向您展示一个实现我需要的小脚本:

for i in $(find / -type d -iname myDir) do
    for j in $(find "$i" -type f) do         
        grep "SearchString" "$j"
    done
done

这将为我提供包含 SearchString 且位于名为 myDir 的任何文件夹中的所有文件。