programing

.svn 디렉토리를 무시하려면 어떻게 해야 하나요?

telebox 2023. 4. 12. 22:13
반응형

.svn 디렉토리를 무시하려면 어떻게 해야 하나요?

는 자주 주주 the 한다.find소스 코드를 검색하거나 파일을 삭제하거나 하는 명령어입니다.각 을 Subversion에 ..svn/text-base/디렉토리 단순 검색 결과 중복되는 결과가 많이 나타납니다.를 들어, '', '재귀 검색', '재귀 검색'을요.uint 개로messages.h ★★★★★★★★★★★★★★★★★」messages.cpp 삭제:

# find -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./messages.cpp:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./messages.cpp:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./.svn/text-base/messages.cpp.svn-base:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./.svn/text-base/messages.cpp.svn-base:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./.svn/text-base/messages.cpp.svn-base:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./virus/messages.cpp:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/messages.cpp:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/messages.h:    void _progress(const std::string &fileName, uint scanCount);
./virus/messages.h:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/messages.h:    uint        _scanCount;
./virus/.svn/text-base/messages.cpp.svn-base:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/.svn/text-base/messages.cpp.svn-base:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/.svn/text-base/messages.h.svn-base:    void _progress(const std::string &fileName, uint scanCount);
./virus/.svn/text-base/messages.h.svn-base:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/.svn/text-base/messages.h.svn-base:    uint        _scanCount;

알 수 있을까요?find.svn★★★★★★★★★★★★★★★★★★?


업데이트: SVN 클라이언트를 버전 1.7로 업그레이드하면 더 이상 문제가 되지 않습니다.

Subversion 1.7에서 도입된 변경사항의 주요 기능은 작업복사 메타데이터 스토리지를 한 곳으로 일원화하는 것입니다..svn1...svncopy.directory의 : "directory" 에 .이 디렉토리에는 작업 복사본에 필요한 모든 메타데이터를 포함하는 SQLite 백업 데이터베이스가 포함되어 있습니다.

왜 그냥 하지 않는가?

find . -not -iwholename '*.svn*'

-not 술어는 경로 내 임의의 위치에 .svn이 있는 모든 것을 부정합니다.

그래서 당신의 경우엔

find -not -iwholename '*.svn*' -name 'messages.*' -exec grep -Iw uint {} + \;

다음과 같습니다.

find . -path '*/.svn*' -prune -o -print

또는 경로 접두사가 아닌 디렉토리를 기반으로 합니다.

find . -name .svn -a -type d -prune -o -print

검색을 위해, ack을 볼 것을 제안해도 될까요?소스 코드 인식입니다.find따라서 위와 같은 소스 코드 저장소 정보를 포함한 많은 파일 형식이 자동으로 무시됩니다.

.svn,.git해 보십시오.

find . -type f -not -path '*/\.*'

「」를 사용하는 이 있는 는, 「」를 사용해 주세요.find파일 할 때 을 사용할 수 .하다

  • git grep- 내의 - Git 저장소 내의 패턴 검색.
  • ripgrep - 디폴트로는 숨김 파일 및 에서 지정된 파일은 무시됩니다..gitignore.

관련:Linux에서 특정 텍스트를 포함하는 모든 파일을 찾으려면 어떻게 해야 합니까?

당신의 경우, 저는 다음과 같이 하겠습니다.

find . -path .svn -prune -o -name messages.* -exec grep -Iw uint {} +

의 Emacs'rgrep는 내장 명령어를 무시합니다..svn및 수 find | grep디폴트로 사용하는 것은 다음과 같습니다.

find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS \
          -o -path \*/.svn -o -path \*/.git -o -path \*/.hg -o -path \*/.bzr \
          -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) \
     -prune -o \
       \( -name .\#\* -o -name \*.o -o -name \*\~ -o -name \*.bin -o -name \*.lbin \
          -o -name \*.so -o -name \*.a -o -name \*.ln -o -name \*.blg \
          -o -name \*.bbl -o -name \*.elc -o -name \*.lof -o -name \*.glo \
          -o -name \*.idx -o -name \*.lot -o -name \*.fmt -o -name \*.tfm \
          -o -name \*.class -o -name \*.fas -o -name \*.lib -o -name \*.mem \
          -o -name \*.x86f -o -name \*.sparcf -o -name \*.fasl -o -name \*.ufsl \
          -o -name \*.fsl -o -name \*.dxl -o -name \*.pfsl -o -name \*.dfsl \
          -o -name \*.p64fsl -o -name \*.d64fsl -o -name \*.dx64fsl -o -name \*.lo \
          -o -name \*.la -o -name \*.gmo -o -name \*.mo -o -name \*.toc \
          -o -name \*.aux -o -name \*.cp -o -name \*.fn -o -name \*.ky \
          -o -name \*.pg -o -name \*.tp -o -name \*.vr -o -name \*.cps \
          -o -name \*.fns -o -name \*.kys -o -name \*.pgs -o -name \*.tps \
          -o -name \*.vrs -o -name \*.pyc -o -name \*.pyo \) \
     -prune -o \
     -type f \( -name pattern \) -print0 \
     | xargs -0 -e grep -i -nH -e regex

대부분의 버전 제어 시스템에 의해 작성된 디렉토리와 많은 프로그래밍 언어용으로 생성된 파일을 무시합니다.하고, 「」를 치환할 수 .find ★★★★★★★★★★★★★★★★★」grep패턴을 참조해 주세요.

GNU 검색

find .  ! -regex ".*[/]\.svn[/]?.*"

이 목적으로 GREP를 사용합니다.~/.bashrc에 넣습니다.

export GREP_OPTIONS="--binary-files=without-match --color=auto --devices=skip --exclude-dir=CVS --exclude-dir=.libs --exclude-dir=.deps --exclude-dir=.svn"

grep은 호출 시 이러한 옵션을 자동으로 사용합니다.

을 만들어 .~/bin/svnfind:

#!/bin/bash
#
# Attempts to behave identically to a plain `find' command while ignoring .svn/
# directories.

OPTIONS=()
PATHS=()
EXPR=()

while [[ $1 =~ ^-[HLP]+ ]]; do
    OPTIONS+=("$1")
    shift
done

while [[ $# -gt 0 ]] && ! [[ $1 =~ '^[-(),!]' ]]; do
    PATHS+=("$1")
    shift
done

# If user's expression contains no action then we'll add the normally-implied
# `-print'.
ACTION=-print

while [[ $# -gt 0 ]]; do
    case "$1" in
       -delete|-exec|-execdir|-fls|-fprint|-fprint0|-fprintf|-ok|-print|-okdir|-print0|-printf|-prune|-quit|-ls)
            ACTION=;;
    esac

    EXPR+=("$1")
    shift
done

if [[ ${#EXPR} -eq 0 ]]; then
    EXPR=(-true)
fi

exec -a "$(basename "$0")" find "${OPTIONS[@]}" "${PATHS[@]}" -name .svn -type d -prune -o '(' "${EXPR[@]}" ')' $ACTION

합니다.find command out 、 command command 、 것 command 、 command command command command command 。.svn디렉토리로 이동합니다.그렇지 않으면 동작은 동일합니다.

예:

# svnfind -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp:            Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp:    Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp:                Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp:            Log::verbose << "Sent message: id " << uint(preparedMessage->id)
./messages.cpp:        Log::verbose << "Discarding unsent message: id " << uint(preparedMessage->id)
./messages.cpp:        for (uint i = 0; i < 10 && !_stopThreads; ++i) {
./virus/messages.cpp:void VsMessageProcessor::_progress(const string &fileName, uint scanCount)
./virus/messages.cpp:ProgressMessage::ProgressMessage(const string &fileName, uint scanCount)
./virus/messages.h:    void _progress(const std::string &fileName, uint scanCount);
./virus/messages.h:    ProgressMessage(const std::string &fileName, uint scanCount);
./virus/messages.h:    uint        _scanCount;

find . | grep -v \.svn

쉽게 이해할 수 있는 grep를 사용하여 명령어를 파이핑하는 것은 어떨까요?

your find command| grep -v '\.svn'

Kaleb와 다른 게시물에 간단한 대안을 추가할까 합니다.find -prune 「」,ack,repofind특히 질문에서 설명한 사용법(및 기타 유사한 사용법)에 적용할 수 있습니다.

  1. .find ... -exec grep ... + 점을 지적해 합니다) (Kenji)find ... | xargs egrep ... (휴대용)find ... -print0 | xargs -0 egrep ...(GNU; 공백이 포함된 파일 이름에서 작동함) 대신find ... -exec grep ... \;.

    find ... -exec ... + ★★★★★★★★★★★★★★★★★」find | xargs이 fork를 않는다.egrep한 번에 여러 개의 파일을 처리할 수 있기 때문에 실행 속도가 훨씬 빨라집니다.

  2. 「 」를 하는 find | xargs 해서 도 쓸 수 요.grep 빠르게 가지치기 쉽다.svn 정규 표현을 지정합니다.find ... -print0 | grep -v '/\.svn' | xargs -0 egrep ...수 때)find의 »-prune□□□□□□□□★

    find | grep | xargs는 GNU의 GNU와 합니다.find의 »-regex 「」를 참조).ghostdog74의 투고 보다 이 높지만((GNU)의합니다), 「Da」의 투고입니다.find사용할 수 없습니다.)

소스 코드 저장소에서는 일반적으로 텍스트 파일에 대해서만 작업을 수행합니다.

첫 번째 줄은 CVS, SVN 및 GIT 저장소 파일을 제외한 모든 파일입니다.

두 번째 줄은 모든 이진 파일을 제외합니다.

find . -not \( -name .svn -prune -o -name .git -prune -o -name CVS -prune \) -type f -print0 | \
xargs -0 file -n | grep -v binary | cut -d ":" -f1

-not -path 옵션과 함께 find를 사용합니다.나는 가지치기 운이 좋지 않았다.

find .  -name "*.groovy" -not -path "./target/*" -print

는 타겟 디렉토리 패스에 없는 그루비 파일을 검출합니다.

이 문제를 해결하려면 , 다음의 검색 조건을 사용합니다.

find \( -name 'messages.*' ! -path "*/.svn/*" \) -exec grep -Iw uint {} +

다음과 같이 제한을 추가할 수 있습니다.

find \( -name 'messages.*' ! -path "*/.svn/*" ! -path "*/CVS/*" \) -exec grep -Iw uint {} +

자세한 내용은 man 페이지 섹션 "Operators"를 참조하십시오.http://unixhelp.ed.ac.uk/CGI/man-cgi?find

주의해 주세요.

find . -type f -name 'messages.*'

-print(표현행 표현은 다음과 같이 됩니다.-type f -name 'messages.*' 때문에 '진짜'입니다.-exec를 참조해 주세요.

에의 내림차순을 하려면 , 그 해, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」에 따라 .-prune을 정지하는 으로 하고 ).합니다).

find . -type d -name '.svn' -prune

이것은 .svn 디렉토리의 경우 True로 평가됩니다.이것에 따라서, 다음의 순서로 부울 쇼트 회선을 사용할 수 있습니다.-o그 (OR), 그, 그, 그,-o는 첫 번째 부분이 False일 때만 체크되므로 .svn 디렉토리가 아닙니다.즉, 다음과 같습니다.

find . -type d -name '.svn' -prune -o -name 'message.*' -exec grep -Iw uint {}

합니다.-o ,,-name 'message.*' -exec grep -Iw uint {}내에.svn " " " " " "

해 주세요.왜냐하면 '이거'니까.svn는 항상 디렉토리(예를 들어 파일이 아님)일 가능성이 높으며, 이 경우 'message'라는 이름과 일치하지 않습니다. '*'은요.-type d다음 작업을 수행합니다.

find . -name '.svn' -prune -o -name 'message.*' -exec grep -Iw uint {}

(「」, 「」, 「」)에해 주세요.-exec을 사용하다

find . -name '.svn' -prune -o -name 'message.*'

-print되지만 션음음음음음음음음음음음음음음음음음음음음음음 the the the the the the the the the the the the the the the the the the the the the the 를 포함한 전체됩니다.-name '.svn' -prune -o모든 .tvn 디렉토리와 '메시지'를 인쇄합니다.*'이렇게 하다.을 사용법 때문에 '액션'을 사용할 '액션해야 합니다.-prune그리고 이렇게 명시적으로해야 합니다.

find . -name '.svn' -prune -o -name 'message.*' -print

findrep를 사용해보세요.findrep는 find/grep 주위에 간단한 래퍼로 ack보다 훨씬 빠릅니다.이 경우 다음과 같이 사용합니다.

findrepo uint 'messages.*'

wcfind 는 .svn 디렉토리를 자동으로 삭제하기 위해 사용하는 검색 래퍼 스크립트입니다.

이것은 Unix 프롬프트에서 기능합니다.

gfind . \ ( - not - wholename '*\.sn*' \ ) - type f -name 'snot.*' - exec grep - Iw int {} +

위의 명령어는 .svn에 없는 FILE을 나열하고 말씀하신 grep을 수행합니다.

보통 출력을 GREP를 통해 한 번 더 파이프로 전송하여 .timeoutn을 삭제합니다.사용 시 속도가 그다지 느리지 않습니다.일반적인 예:

find -name 'messages.*' -exec grep -Iw uint {} + | grep -Ev '.svn|.git|.anythingElseIwannaIgnore'

또는

find . -type f -print0 | xargs -0 egrep messages. | grep -Ev '.svn|.git|.anythingElseIwannaIgnore'

언급URL : https://stackoverflow.com/questions/2314643/how-can-i-get-find-to-ignore-svn-directories

반응형