2009-11-16 3 views
38

Gibt es eine Möglichkeit, die Gesamtgröße eines svn-Verzeichnisses zu berechnen/zu berechnen, wenn Sie eine Revision auschecken?Ermitteln der Gesamtgröße des SVN-Verzeichnisses/Trunks

Ich habe begrenzte Downloads im Internet, also muss ich wissen, wie groß etwas ist, bevor ich gehe und es herunterladen.

Vielen Dank.

Antwort

10

Mithilfe der folgenden können Sie die Größe einzelner Dateien bestimmen.

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

Vielleicht können Sie sich diesen Befehl ansehen, um einen Weg zu finden?

+6

Scheint gut zu funktionieren, dauert aber eine schreckliche Weile und keine Ahnung, wie viel Verkehr schon verschlingt. In der PowerShell ist es so einfach wie: '([xml] (svn list --xml --recursive https: // svn/repo/pfad)) .lists.list.entry | messen -sum size' – Joey

+0

Funktioniert das auch mit externen Geräten? – cetnar

+0

Nein. Externals sind ein ganz anderes Ballspiel. –

5

Ich habe die Powershell-Lösung getestet und es braucht nur eine kleine Korrektur:

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

es einige Zeit, um die xml zu bekommen, aber sehr gut funktioniert.

36

Dies ist meine Modifikation der Antwort. Es gibt an, wie viele Dateien unterhalb eines bestimmten Verzeichnisses in SVN und der Gesamtgröße liegen.

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

Nein, dies dauert noch mehr als 1 Stunde, um die Größe eines <15 GB Repodirres zu überprüfen. Warte noch............. :( – linuscl

2

aus den oben genannten Lösungen Annahme, könnte die folgende

 
#------------------------- 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 -- } 

oder

 
#------------------------- 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

hilfreich sein, Sie haben die XML-Modus der Größe Subversion Befehl list und Summe über die Datei verwenden können .

Unter 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)}' 

Beachten Sie, dass die Festplattennutzung einer tatsächlichen SVN-Kasse ist im Grunde doppelt so viel wie zuvor, weil in der Kasse berechnet Sie die Dateien im Arbeitsverzeichnis haben und in der Revision Cache unter den .svn speziellen Verzeichnissen/Verzeichnissen.

Alternativ, wenn Sie nicht allzu besorgt über RAM-Nutzung sind verwenden Sie einen XPath-Ausdruck, um die Summe zu berechnen, zum Beispiel:

$ 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') 

Oder:

$ 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' -) 

Mit einer solchen XPath-Prozessor auf Ein Repository mit vielen Dateien kann zu einer hohen Speicherauslastung führen, da Tools wie xmllint (die libxml2 verwendet) häufig den vollständigen Dokumentbaum im Speicher erstellen, bevor mit der Zusammenfassung der Elemente begonnen wird.