如何在使用grep进行递归搜索时排除一个目录?

21
如何使用grep进行递归搜索,同时排除特定目录?
背景:我有一个包含日志文件的大型目录,希望在搜索中排除这些文件。最简单的方法是移动日志文件夹。不幸的是,由于项目规定了位置,我无法这样做。
有什么想法吗?
答案:可以使用“--exclude-dir”选项来排除特定目录。下面是示例命令:
``` grep -r --exclude-dir={dir_name} {search_pattern} {directory} ```
其中,“-r”标志表示递归搜索,“--exclude-dir”选项用于排除特定目录,“{dir_name}”为要排除的目录名称,“{search_pattern}”为要搜索的模式,“{directory}”为要搜索的目录。

man grep | grep exclude - Apollys supports Monica
2个回答

31

你是在寻找这个吗?

来自grep手册页面:

--exclude-dir=DIR
            Exclude directories matching the pattern DIR from recursive searches.

非常感谢,我有时候会忘记还有man手册 :) - Kiran
2
旧版本的grep没有这个标志,这真是遗憾:(。 - ale

1

作为替代方案,如果您可以在搜索中使用find,它也可能很有用:

find [directory] -name "*.log" -prune -o -type f -print|grep ...
[directory]实际上可以是当前目录(只需一个.)。

下一部分-name "*.log" -prune是连在一起的。它搜索具有模式*.log的文件名,并将它们从结果中剥离出来。

接下来是-o(表示“或”)

然后是-type f -print,它表示“打印(到标准输出)任何类型的文件。”

这些结果应该包括在[directory]中找到的每个文件(不返回目录),除了那些以.log结尾的文件。然后您可以根据需要grep结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接