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에서만 사용할 수 있습니다. 지원하지 않으면 grep
find와 같은 다른 도구를 사용해야 할 수도 있습니다.예를 들어:
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'