2009-11-16 87 views
38

如果您要簽出修訂版本,是否可以計算/計算svn目錄的總大小?確定SVN目錄/中繼的總大小

我的網絡下載量有限,所以我需要知道在我下載它之前有多大的東西。

謝謝。

回答

10

使用以下內容,您可以確定單個文件的大小。

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

也許你可以環顧這個命令找到方法嗎?

+6

似乎工作正常,但需要一段時間,不知道已經吞噬了多少流量。在PowerShell中,它非常簡單:'([xml](svn list --xml --recursive https:// svn/repo/path)).lists.list.entry |測量 - 總和大小' – Joey 2009-11-16 07:22:15

+0

它也可以與外部工作嗎? – cetnar 2009-11-16 07:33:04

+0

不。外部是一個完整的其他球賽。 – 2009-11-16 07:44:12

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

不,這仍然運行超過1小時來檢查<15GB的回購目錄的大小。還在等............. :( – linuscl 2016-06-07 18:59:59

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

可以使用Subversion的list命令和金額的XML模式在文件大小。

在Linux/UNIX:

$ 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籤的磁盤使用情況是基本上兩倍以上,因爲在結賬時你必須在工作目錄中的文件,並在修訂的計算緩存在.svn特殊目錄/目錄下。

另外,如果你是不是過分關注RAM使用您使用XPath表達式來計算的總和,如:

$ 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處理器一個有許多文件的存儲庫可能會產生很高的內存使用率,因爲像xmllint這樣的工具(使用libxml2)通常會在開始彙總元素之前在內存中構建完整的文檔樹。