2009-11-16 5 views
38

Existe-t-il un moyen de compter/calculer la taille totale d'un répertoire svn si vous deviez vérifier une révision?Déterminer la taille totale du répertoire/tronc SVN

J'ai des téléchargements limités sur Internet, donc j'ai besoin de savoir quelle est la taille de quelque chose avant de partir et de le télécharger.

Merci.

Répondre

10

En utilisant ce qui suit, vous pouvez déterminer la taille de fichiers individuels.

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

Peut-être que vous pouvez parcourir cette commande pour trouver un moyen?

+6

Semble fonctionner correctement, mais prend un temps terrible et aucune idée de la quantité de trafic qui engloutit déjà. Dans PowerShell, c'est aussi simple que: '([xml] (svn list --xml --recursive https: // svn/repo/chemin)) .lists.list.entry | mesure -sum size' – Joey

+0

Est-ce que ça marche aussi avec les externes? – cetnar

+0

Non. Les externes sont un tout autre jeu de balle. –

5

Je l'ai testé la solution PowerShell et il faut juste une petite correction:

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

Il peu de temps pour obtenir le xml, mais fonctionne très bien.

36

Ceci est ma modification à la réponse. Il indique combien de fichiers sont en dessous d'un certain répertoire dans svn et la taille totale.

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

non, cela fonctionne encore pendant plus de 1 heure pour vérifier la taille d'un repo-dir de 15GB. Toujours en attente............. :( – linuscl

2

L'adoption des solutions ci-dessus, ce qui suit pourrait être utile

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

ou

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

Vous pouvez utiliser le mode XML de la commande liste Subversion et somme sur la taille du fichier .

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

Notez que l'utilisation du disque d'une caisse svn réelle est essentiellement deux fois plus que calculé ci-dessus parce que dans la caisse que vous avez les fichiers dans le répertoire de travail et dans la révision cache sous les répertoires/répertoires spéciaux .svn.

Sinon, si vous n'êtes pas trop préoccupé par l'utilisation de la RAM que vous utilisez une expression XPath pour calculer la somme, par exemple:

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

Ou:

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

L'utilisation d'un tel processeur XPath sur un référentiel contenant de nombreux fichiers peut générer une utilisation importante de la mémoire, car des outils tels que xmllint (qui utilise libxml2) construisent souvent l'intégralité de l'arborescence de documents en mémoire avant de commencer à sommer les éléments.

Questions connexes