如何排除 find 、 exec 和 grep 中的文件类型?

如何排除 find 、 exec 和 grep 中的文件类型?

我正在尝试找出使用以下标志的文件 - TRACE_WANTED"。但是,我不希望查找程序在 .c 和 .h 中搜索此标志。如何发出命令来排除查找程序*.c 和 *.h 文件。

这是我正在使用的典型命令 -

find ./ -iname  *.c -exec grep -iHrn  TRACE_WANTED {} \;

答案1

GNUgrep能够从其内置的递归搜索中排除 glob。尝试:

grep -iHrn  --exclude='*.c' --exclude='*.h' TRACE_WANTED

这将从当前目录开始递归搜索,就像您的find命令一样。它排除所有*.c*.h文件。

答案2

如果您需要的只是找到包含单词 TRACE_WANTED 的文件,不包括 *.c 和 *.h 文件,您甚至不需要使用寻找, grep 单独可以为您完成这项工作:

 grep -r --exclude={"*.c","*.h"} TRACE_WANTED ./

默认情况下,引号在 bash 中是不必要的,但在 zsh 中是必需的。

答案3

find . ! -name '*.[ch]' -type f -exec grep -l TRACE_WANTED {} +

或者,如果您可以使用grep递归-r搜索:

grep -lr --exclude='*.[ch]' TRACE_WANTED

相关内容