재귀적으로 폴더를 검색하지만 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/\*"

이 줄을 추가하면 .bashrc재귀 grep이 더 이상 .svn디렉토리에 입력되지 않습니다. 물론 원하는 만큼 풍부해질 수 있습니다.

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

관련 정보