grep -r에서 숨겨진 하위 디렉터리 제외

grep -r에서 숨겨진 하위 디렉터리 제외

svn의 로컬 복사본이 있고 some_string 문자열을 검색하고 싶습니다.

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

그러나 한 단계 더 나아가면 숨겨진 디렉터리의 첫 번째 수준이 제외되는 것 같습니다.

$ cd lang && grep some_string * -r
en:some_string=Some string

첫 번째 깊이 수준뿐만 아니라 출력에서 ​​숨겨진 svn 디렉터리를 어떻게 제거할 수 있습니까?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

답변1

--exclude-dir다음과 같은 옵션을 사용하십시오 .

grep -r --exclude-dir='.*' some_string

에서 man grep:

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

하지만 이 --exclude-dir옵션은 GNU grep에서만 사용할 수 있습니다. 지원하지 않으면 grepfind와 같은 다른 도구를 사용해야 할 수도 있습니다.예를 들어:

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

답변2

나는 보통 이것을 사용합니다 :

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}첫 번째 항목을 삭제 ./한 다음 grep점으로 시작하는 모든 항목을 삭제합니다.

답변3

OSX에서는 다음을 사용합니다.

grep -lR --exclude-dir={'*node_modules*',build,'./.*'} 'SearchTerm'

관련 정보