2009-11-16 21 views

Respuesta

10

Utilizando el siguiente, puede determinar el tamaño de los archivos individuales.

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

¿Quizás pueda mirar alrededor de este comando para encontrar la manera?

+6

Parece que funciona bien, pero toma un tiempo horrible y ni idea de cuánto tráfico se traga ya. En PowerShell es tan fácil como: '([xml] (svn list --xml --recursive https: // svn/repo/path)) .lists.list.entry | medida -sum size' – Joey

+0

¿Funciona con externos también? – cetnar

+0

No. Los externos son un juego completamente diferente. –

5

He probado la solución PowerShell y que sólo necesita una pequeña corrección:

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

Es cierto tiempo para conseguir el xml, pero funciona muy bien.

36

Esta es mi modificación a la respuesta. Informa cuántos archivos están debajo de cierto directorio en svn y el tamaño total.

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

no, esto todavía se está ejecutando durante más de 1 hora para verificar el tamaño de un <15 GB de repo-dir. Todavía esperando............. :( – linuscl

2

La adopción de las soluciones anteriores, el siguiente podría ser útil

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

o

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

Puede utilizar el modo de XML de la lista de comandos de Subversion y suma sobre el tamaño del archivo .

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

Tenga en cuenta que el uso del disco de un svn checkout real es básicamente el doble de lo calculado anteriormente porque en la caja tiene los archivos en el directorio de trabajo y en la revisión caché bajo el directorio/directorios especiales .svn.

Alternativamente, si usted no está demasiado preocupado por el uso de RAM utiliza una expresión XPath para calcular la suma, por ejemplo:

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

O:

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

El uso de un procesador de XPath en tales un repositorio con muchos archivos puede producir un alto uso de memoria porque las herramientas como xmllint (que usa libxml2) a menudo construyen el árbol de documentos completo en la memoria antes de comenzar a sumar sobre los elementos.

Cuestiones relacionadas