我正在尝试找出使用以下标志的文件 - 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