find, exec 및 grep에서 파일 형식을 제외하는 방법은 무엇입니까?

find, exec 및 grep에서 파일 형식을 제외하는 방법은 무엇입니까?

"TRACE_WANTED" 플래그를 사용하는 파일을 찾으려고 합니다. 그러나 파인더가 .c 및 .h에서 이 플래그를 검색하는 것을 원하지 않습니다. 파인더를 *.c에서 제외하려면 어떻게 해야 합니까? 및 *.h 파일.

이것은 내가 사용하는 일반적인 명령입니다.

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

답변1

GNU는 grep내장된 재귀 검색에서 glob을 제외할 수 있습니다. 노력하다:

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

이는 명령과 마찬가지로 현재 디렉터리에서 시작하여 재귀적으로 검색합니다 find. 모든 파일 *.c을 제외합니다 *.h.

답변2

*.c 및 *.h 파일을 제외하고 TRACE_WANTED라는 단어가 포함된 파일을 찾는 것뿐이라면 다음을 사용할 필요도 없습니다.찾다, 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

관련 정보