如何对所有文件和所有目录执行 Grep 搜索

当您必须搜索文件的内容时,Grep 是一个很好的工具。

通常,您在单个文件上运行 grep,如下所示:

grep search_term filename

Grep 用途广泛。 如果你想 使用 grep 搜索目录中的所有文件,像这样使用它:

grep search_term *

它有一个问题。 它只搜索当前目录中的所有文件。 它不会在子目录中搜索。

你(们)能做到 grep 搜索所有文件和所有子目录 当前目录使用 -r 递归搜索选项:

grep -r search_term . 

如果您不在要执行搜索的目录中,也可以指定目录路径:

grep -r search_term directory_path

这是一个快速回顾。 让我通过适当的示例详细向您展示所有这些,以便您更容易理解。

grep 在一个目录的所有文件中搜索

这是我将在其中使用的目录结构 example. 除了empty.txt,所有文件都包含术语“simple”,我将在其上执行grep 搜索。

[email protected]:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

要在当前目录的所有文件中搜索单词“simple”,只需使用通配符

grep simple *

. 通配符实际上替换为当前目录中所有文件和目录的名称。

grep 在文件夹的所有文件中搜索

使用 grep 搜索目录的所有文件

grep search_term directory_path/*

如果您不在要执行的同一目录中,则可以指定目录路径并以 /* 结尾

基本上,您使用通配符来扩展给定目录的所有元素(文件和目录)。

现在您知道了,让我们看看如何使用 grep 执行递归搜索,以便它还可以查看子目录中的文件。

在目录的所有子目录中grep递归搜索 -r Grep 提供了一个

递归搜索的选项。 使用此选项,grep 将查看当前(或指定)目录中的所有文件,并且还将查看所有子目录中的所有文件。 example 这是我在之前执行的递归搜索

grep -r simple .

在当前文件夹中进行 grep 搜索:

grep 在所有文件和所有子目录中递归搜索

使用 grep 命令的 -r 选项进行递归搜索 -R 还有一个 -r 递归搜索的选项,它的工作原理几乎与

grep -R simple .

选项。 grep -r 那么,有什么区别 grep -R-R ? 实际上只有一个。 这

是取消引用搜索,这意味着它将按照符号链接转到原始文件(可能位于系统的其他部分)。 -R 看一下输出 example在同一个地方搜索

:使用 grep 进行递归搜索,包括符号链接

grep -R 递归搜索也在链接文件中搜索 linked.txt 您是否注意到它提供了一个额外的搜索结果 -r 这基本上是一个符号链接,在 grep 搜索中被省略了

选项?

grep -r search_term path_to_directory

额外提示:从递归 grep 搜索中排除某个目录

grep -r --exclude-dir=dir_name serach_term directory_path

一切似乎都很好,但是如果您想从递归搜索中排除某个目录怎么办? 对此也有规定。 我告诉过你,grep 是一个非常通用的命令。

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

不是这个。 您可以通过以下方式从递归搜索中排除多个子目录: example 这是我们的排除目录的样子

这里:从 grep 递归搜索中排除目录

从 grep 递归搜索中排除目录 example 是的,正如 -r 以上,排除适用于两者 -R

递归选项。

总结

以下是使用 grep 搜索多个文件和目录的快速摘要:grep 命令
描述grep 字符串 *
搜索当前目录下的所有文件grep 字符串目录
搜索 dir 目录下的所有文件grep -r 字符串。
在所有子目录中的所有文件中递归搜索grep -r 字符串目录
在 dir 的所有子目录中的所有文件中递归搜索grep -R 字符串。

与 r 相同,但遵循符号链接

我希望你喜欢这个快速的 grep 技巧。 如果你想要更多,你可以阅读这个关于使用 grep 命令的详细教程:

如果您对此主题有任何问题或建议,请告诉我。