.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에서 도입된 변경사항의 주요 기능은 작업복사 메타데이터 스토리지를 한 곳으로 일원화하는 것입니다.
.svn
1...svn
copy.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
특히 질문에서 설명한 사용법(및 기타 유사한 사용법)에 적용할 수 있습니다.
.
find ... -exec grep ... +
점을 지적해 합니다) (Kenji)find ... | xargs egrep ...
(휴대용)find ... -print0 | xargs -0 egrep ...
(GNU; 공백이 포함된 파일 이름에서 작동함) 대신find ... -exec grep ... \;
.find ... -exec ... +
★★★★★★★★★★★★★★★★★」find | xargs
이 fork를 않는다.egrep
한 번에 여러 개의 파일을 처리할 수 있기 때문에 실행 속도가 훨씬 빨라집니다.「 」를 하는
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
'programing' 카테고리의 다른 글
유닛 테스트에서의 WPF 디스패처 사용 (0) | 2023.04.12 |
---|---|
파일이 Excel로 열려 있는 경우 pd.read_excel이 PermissionError를 발생시킵니다. (0) | 2023.04.12 |
값을 기준으로 개체를 제거할 어레이 확장 (0) | 2023.04.12 |
개체 배열에서 속성 값 배열 가져오기 (0) | 2023.04.12 |
키-값 튜플 목록을 사전으로 변환하려면 어떻게 해야 합니까? (0) | 2023.04.12 |