2009-11-16 2 views
38

개정판을 체크 아웃하는 경우 svn 디렉토리의 전체 크기를 계산/계산할 수 있습니까?SVN 디렉토리/트렁크의 전체 크기 결정

인터넷 다운로드가 제한되어 있으므로 다운로드하여 다운로드하기 전에 무언가가 얼마나 큰지 알아야합니다.

감사합니다.

답변

10

아래를 사용하여 개별 파일의 크기를 결정할 수 있습니다.

svn list --verbose --recursive http://svn/repo/path 

어쩌면 방법을 찾기 위해이 명령을 둘러 볼 수 있습니까?

+6

잘 작동하는 것처럼 보일 지 모르지만 끔찍한 트래픽이 얼마나 많은지 잘 몰라요. PowerShell에서는 다음과 같이 쉽습니다.'([xml] (svn list --xml - 재귀적인 https : // svn/repo/path)) .lists.list.entry | 측정 - 수화 크기 ' – Joey

+0

외부와도 작동합니까? – cetnar

+0

아니요. 외부는 완전히 다른 야구 게임입니다. –

5

내가 PowerShell을 솔루션을 테스트 한 그것은 단지 작은 수정을 필요로 :

([xml](svn list --xml --recursive https://svn/repo/path)).lists.list.entry | measure-object -sum size 

그것은 XML을 얻을 수 있지만, 아주 잘 작동하는 데 시간이.

36

이것은 답변을 수정 한 것입니다. 그것은 얼마나 많은 파일이 svn의 특정 디렉토리와 총 크기 아래에 있는지보고합니다. 위의 방법에서 채택

svn list -vR svn://svn/repo/subdir|awk '{if ($3 !="") sum+=$3; i++} END {print "\ntotal size= " sum/1024000" MB" "\nnumber of files= " i/1000 " K"}' 
+0

아니요,이 기능은 <15GB repo-dir 크기를 확인하는 데 1 시간 이상 계속 실행됩니다. 아직 기다리고 ............. :( – linuscl

2

, 다음

 
#------------------------- Show Repositories, Revisions and Individual Sizes -------------------- SuN --- 2011-11-14 -- { 

CSVN_DIR=/opt/csvn 

cd ${CSVN_DIR} 

REPO_PREFIX="${CSVN_DIR}/data/repositories" 
REPO_SUFFIX="db/current" 


for i in `ls ${REPO_PREFIX}/*/${REPO_SUFFIX} ` 
do 
    if [ -f $i ] 
    then 
    FILENAME=`ls -l $i` 
    REV_NO=`cat $i` 
    REPONAME=`echo $i | awk '{ srch="'${REPO_PREFIX}'/"; idx = index($0,srch); xstr=substr($0,idx + length(srch)); idx = index(xstr, "/'${REPO_SUFFIX}'"); print substr(xstr,1,idx-1)}'` 

    #REPONAME=sn_library 

    ${CSVN_DIR}/bin/svn list --verbose --recursive https://vctl.ds.xxxxxx.in:9501/svn/${REPONAME} | awk 'BEGIN {repo="'${REPONAME}'"; rev="'${REV_NO}'";} {print "Repository: " repo " Revision: " rev $0 } ' 
    fi 
done 
#------------------------- Show Repositories, Revisions and Individual Sizes -------------------- SuN --- 2011-11-14 -- } 

또는

 
#------------------------- Show Versions of Repositories and Total Size -------------------- SuN --- 2011-11-14 -- { 

CSVN_DIR=/opt/csvn 
cd ${CSVN_DIR} 

REPO_PREFIX="${CSVN_DIR}/data/repositories" 
REPO_SUFFIX="db/current" 


for i in `ls ${REPO_PREFIX}/*/${REPO_SUFFIX} ` 
do 
    if [ -f $i ] 
    then 
    FILENAME=`ls -l $i` 
    REV_NO=`awk '{print $1; exit}' $i` 
    REPONAME=`echo $i | awk '{ srch="'${REPO_PREFIX}'/"; idx = index($0,srch); xstr=substr($0,idx + length(srch)); idx = index(xstr, "/'${REPO_SUFFIX}'"); print substr(xstr,1,idx-1)}'` 

    #REPONAME=sn_library 
    COL_PREFIX="Repository:\t${REPONAME}\tRevision No:\t${REV_NO}\t${FILENAME}" 

    COL_PREFIX=`echo "${COL_PREFIX}" | awk '{xstr = $0; gsub(" ","_",xstr); gsub(":","_",xstr); print xstr;}'` 


    ${CSVN_DIR}/bin/svn list -vR https://vctl.ds.xxxxxx.in:9501/svn/${REPONAME} | awk 'BEGIN{xstr="'${COL_PREFIX}'"} {if ($3 !="") sum+=$3; i++} END {print xstr "\tTotal size= \t" sum/1024/1024 "\tMB" "\t spread across \t" i "\tfiles/folders "}' 

    fi 
done 

#------------------------- Show Versions of Repositories and Total Size -------------------- SuN --- 2011-11-14 -- } 


0

당신은 파일 크기를 통해 서브 버전 목록 명령과 합의 XML 모드를 사용할 수 있습니다 도움이 될 수 있습니다 . 리눅스/유닉스에

: 실제 SVN 체크 아웃의 디스크 사용량은 기본적 것을

$ svn list --xml --recursive http://svn.example.org/module/trunk | awk -F'[><]' \ 
     '/^ *<size>/ {s+=$3} END {printf("%.1f GiB\n", s/1024/1024/1024)}' 

주 두 배의 체크 아웃에 당신이 작업 디렉토리에있는 파일을 가지고 있기 때문에 위 개정 계산으로 캐시는 .svn 특수 디렉토리/디렉토리 아래에 있습니다.

$ printf '%.1f GiB\n' $(svn list --xml --recursive \ 
    http://svn.example.org/module/trunk | xmlstarlet sel -t -v \ 
     'sum(/lists/list/entry/size) div 1024 div 1024 div 1024') 

또는 :

$ printf '%.1f GiB\n' $(svn list --xml --recursive \ 
    http://svn.example.org/module/trunk | xmllint --xpath \ 
     'sum(/lists/list/entry/size) div 1024 div 1024 div 1024' -) 

그러한하는 XPath 프로세서를 사용하면 RAM 사용에 대한 지나치게 우려하지 않을 경우

또는, 합, 예를 계산하기 위해 XPath 식을 사용 많은 파일을 가진 저장소는 xmllint (libxml2를 사용하는)와 같은 도구가 요소에 대해 합계를 시작하기 전에 메모리에 전체 문서 트리를 구성하기 때문에 많은 메모리 사용량을 초래할 수 있습니다.

관련 문제