grep -r에서 숨겨진 서브 디렉토리 제외


22

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 diretories를 어떻게 제거 할 수 있습니까?

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

직접적인 대답은 아니지만 ack 을 시도 할 수 있습니다 .
depquid

답변:


21

다음 --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 . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

나는 너무 오래된 리눅스가 있어야합니다 ...
MUY Belgium

답변을 편집했습니다 . findgrep이 지원하지 않는 경우 버전을 사용해보십시오 --exclude-dir.
jimmij

나는 grep 버전 2.5.1 버전을 가지고 있으며 --exclude-dir 인수가 없으며, 내가 생각한 모든 것을 시도했습니다 ...
MUY Belgium

1
두 번째 솔루션은 사용하지 않습니다. --exclude-dir사용해 보셨습니까?
jimmij

'비정형 옵션'
MUY Belgium

1

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

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

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


코드에 따르면 e#텍스트에 따르면e%
Stephen Rauch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.