2011-11-08 4 views

답변

4

반복적으로 디렉토리를 찾고, 각각에 대해 SVN 정보를 얻으려고합니다. 성공한 경우 디렉토리로 내려 가서 디렉토리 이름을 인쇄하십시오.

find -type d -exec bash -c "svn info {} > /dev/null 2> /dev/null" \; -prune -print 

이렇게하면 디렉토리가 나열됩니다.

저장소 정보를 원한다면 find exec 명령의 중간에 저장소 정보를 추가 할 수 있습니다.

find -type d -exec bash -c "svn info {} 2> /dev/null | grep URL" \; -prune -print 

편집 : 나는 단지 .svn 하위 디렉토리의 존재를 테스트하여 더 나은 결과를 찾을

. 그런 다음 svn info이 끝에 한 번 호출되고 경로 및 URL에 대해 grepped됩니다. (파일 이름의 공백을 막으려면 -0을 사용하십시오.)

find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)' 
+0

URL을 어떻게 읽나요? 나는'svn info | grep URL'을 스크립트에 넣으시겠습니까? – Pentium10

+0

그러면 디렉토리가 인쇄됩니다. URL을 원하면 각각에 대해'svn info'를 호출하십시오. –

+0

폴더와 URL을 함께 사용하고 싶습니다. 그러나 URL이 가장 중요합니다. – Pentium10

0

어떤 종류의 제한 사항에 따라 다른 방법이있을 수 있습니다. 가장 쉬운 방법은 svn ls -R | grep -v "\."을 사용하여 현재있는 저장소 위치에서 모든 하위 폴더를 가져 와서 각 줄 앞에 LS의 루트에 URI를 추가하는 for 루프로 전달하는 것입니다. 그러나 "."이 포함되지 않은 파일이있는 경우에는 적합하지 않습니다. 폴더로 감지 될 것입니다. 불행히도 svn ls은 파일/폴더별로 필터링 할 수 없으므로 확장명이없는 파일 이름을 처리해야하는 경우 소스를 체크 아웃하고 찾기를 사용하여 폴더 이름을 가져 오는 것과 같은 다른 작업을 수행해야합니다.

+0

현재있는 폴더는 SVN 저장소가 아니지만 자손 중 하나에있을 수 있습니다. – Pentium10

0
user_home=... # fill in the user's home dir 
old_dir=/../ 
find $user_home -name .svn | rev | cut -f2- -d/ | rev | while read line ; do 
    echo -n "$line"$'\t' 
    wc -c <<<"$line" 
done | sort -t$'\t' -k1,1 -k2,2n | while read dir size ; do 
    if [[ $dir != $old_dir* ]] ; then 
     old_dir=$dir 
     svn info $dir | grep URL 
     echo PATH: $dir 
     echo 
    fi 
done 

사용자가 공백이있는 디렉토리에 SVN을 저장하지 않기를 바랍니다.