2011-01-11 6 views
5

어떻게 찾아 발생할 때마다 교체하는 (재귀 찾기/교체)은/내/테스트/디렉토리/디렉토리 트리 아래 모든 텍스트 파일에SVN 체크 아웃 내에서 재귀 찾기 및 바꾸기를 수행하려면 어떻게해야합니까?

bar 

foo 

합니다.

는하지만 나는 SVN 체크 아웃 내에서 안전하게 수행 할 수와 SVN 제한으로 지금까지

유사을 .svn 디렉토리 안에 아무것도 만지지하지만 할 :이 약 Awk/Sed: How to do a recursive find/replace of a string?

답변

10

여러 possiblities있다 quivalent는 여러분이 참조하는 대답에서 제안한 것처럼 매우 간단하며 파일을 한 번만 스캐닝하면됩니다.

당신이 참조한 질문에서와 같은 대답 중 하나를 사용하지만, 뒤에 -path '*/.svn' -prune -o을 추가하면 SVN 디렉토리를 제거 할 수 있습니다. 옵션을 find과 함께 사용하는 방법에 대한 설명은 this question을 참조하십시오.하지만 패턴이 잘못되었음을 유의하시기 바랍니다. 따라서, 다음을 사용, 모든 파일을 인쇄하려면 :

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

을 다음을 수행 할 수 있습니다 당신이 언급 한 문제의 제안대로 xargs 전화 또는 무엇이든으로, 개별 교체 할 수있는 파이프. 당신이 시스템에있는 경우

: 재귀 GREP을 사용하여

find . -path '*/.svn' -prune -o -type f -exec sed -i 's/foo/bar/g' {} + 

: 나는 John Zwinck's answer에서 버전을 선호하지만 내가 여기에 재현하지 않습니다 다른 옵션에 대한이 많은 논의가있다 GNU grep을 사용하면 파일 목록을 찾을 수 있습니다. 이것은 아마 찾아보다 효율적이다, 그러나 당신은 일치하는 파일에 대한 sed를 호출 할 수 않으며, 개인적으로 기억에 훨씬 더 쉽게 구문을 찾을 수 있습니다 (또는 맨 페이지에서 파악) :

sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .` 

-l 옵션을 사용하면 grep은 일치하는 줄이 아닌 파일 이름 목록 만 출력합니다.

GUI를 편집기 사용 : Windows를 사용하는 경우

다른 방법으로는, 수행을 내가 할 - (무료 버전에서 사용 가능) NoteTab 편집기의 사본을 얻을, 그 검색 -를 사용 disk-replace 명령을 사용하면 숨겨진 .svn 디렉터리를 자동으로 무시하고 작동합니다.

편집 :.svn 대신 */.svn으로 수정 된 검색 패턴. 자세한 내용과 다른 가능성을 추가했습니다. 그러나 이것은 여러분의 플랫폼과 svn 버전에 따라 달라집니다 : 이없는 경우가 있습니다. CentOS 7과 같은 경우가 있습니다.

+0

나는 이것을 할 것입니다 : find. -path '.svn'-prune -o -type f -print 하지만 작동하지 않는 것 같습니다. –

+0

그건 내가하고 싶은 말입니다. 당신 말이 맞아요, 효과가 없습니다. 나는 왜 그런지 알아 냈다고 생각하고 수정하도록 편집 할 것입니다. –

+0

CentOS 7에서 재귀 grep을 수행 할 때 여전히 .svn 디렉토리가 있습니다. 대신에 --exclude-dir = '. svn ''을 쓰면 사라집니다. – Kev

0

어떻게? 당신이 문자열이있는 파일을 알면 쉽게 나오지으로 배관에 의해 변경 될 수 있습니다 .... 특정 확장자를 가진 파일 내에서 search_string을 찾는 중간 솔루션입니다

grep -i "search_string" `find "*.some_extension"` 

....

모든 파일의 목록을 만들 찾기를 사용하고 sed 또는 전자에 배관 : 찾기를 사용

:

+0

grep -R -i search_string "을 실행하는 것은 매우 복잡한 것처럼 보입니다. 두 경우 모두 SVN 디렉토리를 제외시키기 위해 뭔가를 추가해야합니다. –

+0

@Brooks : 모든 grep이 재귀 적 스위치를 가지고 있기 때문에 사용하기에 더 편리한 버전입니다 .... – t0mm13b

관련 문제