【问题标题】:Get list of files that contain given text within directory given by pattern获取包含模式给定目录中给定文本的文件列表
【发布时间】:2015-11-06 20:11:33
【问题描述】:

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

假设我的文件系统中有许多名为 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 之间做一步,但不知道如何做到这一点。

【问题讨论】:

  • 当然,但这需要很长时间,我想通过提供一些有关用于搜索的文件夹的信息来简化这一点。
  • find /path1 /path2 -type f -exec grep -H "your string" {}\; 就足够了。
  • @fedorqui 问题是我不知道文件所在的目录(绝对路径),只知道它们的名称。因此path1 可以是/usr/path1 甚至/etc/someotherdir/myDir
  • 好的,所以您想在您知道名称的目录中查找文件,但不知道它们的确切放置位置。然后,如果您不了解更多信息,则必须从 / 查找所有内容。

标签: linux grep find filesystems


【解决方案1】:

我想我明白了,我会向你展示一个可以满足我需要的小脚本:

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

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

【讨论】:

  • 有趣!只是想知道:这更快吗?我的意思是,因为浏览所有目录(第一个 for)非常耗时。
  • 对我来说只需要几秒钟
猜你喜欢
  • 1970-01-01
  • 2015-04-06
  • 2016-11-04
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多