programing

grep에서 .svn 디렉토리 제외

closeapi 2023. 4. 21. 20:53
반응형

grep에서 .svn 디렉토리 제외

Subversion 작업복사 디렉토리를 그리핑하면 .svn 디렉토리의 파일이 많이 표시됩니다..svn 디렉토리에서 모든 결과를 제외하면서 디렉토리를 재귀적으로 grep할 수 있습니까?

GNU Grep 를 사용하고 있는 경우는, 다음과 같이 동작합니다.

grep --exclude-dir=".svn"

GNU Grep가 없는 UNIX 시스템에 있는 경우는, 다음의 조작을 실시해 주세요.

grep -R "whatever you like" *|grep -v "\.svn/*" 

grep > = 2.5.1a의 경우

이것을 환경에 도입할 수 있습니다(예:.bashrc)

export GREP_OPTIONS='--exclude-dir=".svn"'

추신: Adrinan 덕분에 제 버전에는 추가 인용문이 있습니다.

export GREP_OPTIONS='--exclude-dir=.svn'

PPS: 이 env 옵션은 권장 해제 마크가 붙어 있습니다.https://www.gnu.org/software/grep/manual/html_node/Environment-Variables.html "이 때문에 포터블스크립트 작성문제가 발생하므로 기능은 향후 출시될 grep에서 삭제될 예정입니다.또한기능이 사용되면 grep에 경고가 표시됩니다. 대신 별칭 또는 스크립트를 사용하십시오."

ack('더 나은 grep')을 사용하면 자동으로 처리됩니다(그리고 다른 많은 현명한 작업도 수행합니다).확인해 볼 만합니다.

psychoschlumpf는 맞지만 최신 버전이 있는 경우에만 작동합니다.grep. 이전 버전에서는--exclude-dir선택.단, 코드베이스가 매우 크면 더블-grep- ing은 오래 걸릴 수 있습니다.이것을 드롭 해 주세요..bashrc휴대용으로는.svn- 적은 grep:

alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'

이제 다음을 수행할 수 있습니다.

sgrep some_var

...기대된 결과를 얻을 수 있습니다.

물론, 만약 당신이 나처럼 정신나간 사람이고 단지 같은 것을 사용해야 한다면.bashrc모든 곳에서 4시간 동안 복잡한 bash 함수를 작성할 수 있습니다.아니면 나 같은 미친 사람이 온라인에 올리기를 기다릴 수도 있어

http://gist.github.com/573928

grep --exclude-dir=".svn"

는, 이름 「.sn」이 꽤 고유하기 때문에 동작합니다.그러나 더 일반화된 이름에서는 실패할 수 있습니다.

grep --exclude-dir="work"

"/home/user/work"와 "/home/user/stuff/work"가 있으면 둘 다 건너뜁니다."/*/work/*"를 정의하여 이전 폴더 이름으로만 제외를 제한할 수 없습니다.제가 실험할 수 있는 한, GNU grep에서는 단순한 --exclude는 디렉토리를 제외하지 않습니다.

2. GNU GREP 2.5의 --exclude-dirs유효한 옵션이 아닙니다.다른 방법으로는 이 방법이 효과적이었습니다.

grep --exclude="*.svn-base"

이 더 이 될 입니다. 모든 에 포함된 행은 합니다..svn/실제 파일에서 우연히 그런 줄을 걸러내지 않기 때문입니다.

2개의 GREP로 해결:

  1. 첫 번째 GREP는 모든 것을 가질 것이다.
  2. 두 번째 GREP는 (배관을 통해) 첫 번째 GREP 출력을 입력으로 사용합니다.-v 플래그를 사용하여 검색어와 일치하지 않는 행을 선택합니다.파일 경로에 .svn이 포함되지 않은 첫 번째 grep의 모든 out이 남습니다.

    -v, --invert-match 일치하지 않는 행을 선택하려면 일치 감각을 반전합니다.

    grep the_text_you_want_to_search_for * | grep - v . sechn

방대한 코드 베이스로 더블 그리핀을 시도했지만 시간이 오래 걸려서 동료의 도움을 받아 이 솔루션을 얻었습니다.

모든 것을 처리하고 결과만 표시하는 'grep - v'에 비해 이들 디렉토리의 처리가 정지되므로 프루닝이 훨씬 빠릅니다.

find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'

.bashrc에서 이 명령어에 에일리어스를 붙일 수도 있습니다.

alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '

간단하게 사용

sgrep 'whatever' 

다른 옵션은 비록 받아들일 수 없는 답변이지만 git에 repo를 복제하여 사용하는 것입니다.git grep.

svn 저장소로 이지 않습니다.git-svn드문 경우지만 이중 grep 솔루션인 svngrep을 사용합니다.다만, 여기에서는 많은 회답이 나타나듯이, 대규모 저장소에서는 속도가 느려져 디렉토리가 아닌 「.svn」은 제외됩니다.이런 경우는 극히 드물다고 생각합니다만...

또한 여러 GREP의 퍼포먼스가 느립니다만, git 같은 것을 사용하면 svn에서는 거의 모든 것이 느려집니다!

마지막으로, 나의 svngrep의 변형은 컬러라이제이션에 통과하고 있습니다.대충! 대충!grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"

.5의 경우 여러 GREP 2.5.1을 할 수 .--exclude .svnfiles.complete files files files files files files files files.

$ grep -V | grep grep
grep (GNU grep) 2.5.1

GREP_OPTIONS="--exclude=*.svn-base --exclude=entries --exclude=all-wcprops" grep -l -R  whatever ./

재귀의 --exclude 옵션이 당신이 찾고 있는 것이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/1491514/exclude-svn-directories-from-grep

반응형