폴더를 재귀적으로 검색하지만 svn 하위 폴더는 제외합니다.

폴더를 재귀적으로 검색하지만 svn 하위 폴더는 제외합니다.

SVN에서 관리하는 대규모 파일 시스템의 모든 항목을 찾고 싶지만 어떤 디렉토리에 포함된 어떤 것도 foo일치시키고 싶지 않습니다 ..svn

이렇게 하면 즉시 일치하는 항목을 얻지만 grep -l -e 'foo' *명령을 사용하여 svn 디렉터리를 제외하려고 하면 중단됩니다.grep -l -e 'foo' --exclude-dir=".svn"

내가 뭘 잘못했나요?

답변1

--exclude-dir명령줄에 파일을 나열할 필요성을 대체하지 않습니다. grep표준 입력을 기다리고 있기 때문에 "중단"되어 있습니다 .

grep -l -e 'foo' --exclude-dir=".svn"*

사용을 고려해보세요확인하다, .svn기본적으로 유사한 폴더를 제외합니다(그리고 다른 많은 기능이 있습니다).

답변2

당신은 관심이 있을 수도 있습니다확인하다. 재귀 검색(및 기타 grep 유사 작업)을 수행하고 다음과 같은 항목을 제외합니다..svn또는.git기본적으로.

답변3

해결책은 grep --exclude-dir...괜찮지만 다른 방법을 보여주기 위해 다음을 find사용하여 이 작업을 수행 할 수 있습니다 -prune.

find -name .svn -prune -o -type f -exec grep -l "$pattern" {} +

find평소보다 더 나은 작업을 수행하려면 다음을 수행하십시오 grep -r.

find -name .svn -prune -o -type f -exec grep -q "$pattern" {} \; -exec ./process {} \;

답변4

다음과 같은 일을하고 싶지 않다면.svn 한 번$GREP_OPTIONS다음과 같이 변수를 제외하도록 설정할 수 있습니다 .

export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"

재귀 grep 에 이 줄을 추가하면 .bashrc더 이상 디렉터리에 들어가지 않습니다 .svn. 물론 필요한 만큼 풍부할 수 있습니다.

export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"

관련 정보