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=\*~"