2009-11-16 6 views
38

का कुल आकार निर्धारित करें यदि आप एक संशोधन की जांच करना चाहते हैं तो 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

+0

क्या यह बाहरी के साथ भी काम करता है? – cetnar

+0

नहीं। बाहरी एक अन्य बॉलगेम हैं। –

5

मैं PowerShell समाधान परीक्षण किया है और यह सिर्फ एक छोटा सा सुधार की आवश्यकता:

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

कुछ समय एक्सएमएल प्राप्त करने के लिए है, लेकिन बहुत अच्छी तरह से काम करता है।

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

आप फ़ाइल आकार से अधिक सबवर्सन सूची कमान और योग की एक्सएमएल मोड का उपयोग कर सकते हैं हो सकता है ।

लिनक्स/यूनिक्स पर:

$ 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 विशेष निर्देशिका/निर्देशिका के तहत कैश।

$ 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 का उपयोग करता है) जैसे उपकरण अक्सर तत्वों पर योग शुरू करने से पहले स्मृति में पूर्ण दस्तावेज़ पेड़ का निर्माण करते हैं।