确定SVN目录/ trunk的总大小
有没有一种方法来计算/计算一个SVN目录的总大小,如果你要签出一个修订?
我有限的互联网下载,所以我需要知道有多大的事情之前,我去下载它。
谢谢。
使用下面的,你可以确定单个文件的大小。
svn list --verbose --recursive http://svn/repo/path
也许你可以环顾这个命令find一个方法?
这是我对答案的修改。 它报告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"}'
我已经testing了PowerShell解决scheme,只需要稍微修改一下:
([xml](svn list --xml --recursive https://svn/repo/path)).lists.list.entry | measure-object -sum size
有一段时间来获得XML,但工作得很好。
从以上解决scheme中采取以下措施可能会有所帮助
#-------------------------显示存储库,修订版本和个人大小----------------- --- SuN --- 2011-11-14 - { CSVN_DIR = /select/ csvn cd $ {CSVN_DIR} REPO_PREFIX = “$ {CSVN_DIR} /数据/库” REPO_SUFFIX = “分贝/电stream” 因为我在`ls $ {REPO_PREFIX} / * / $ {REPO_SUFFIX}` 做 如果[-f $ i] 然后 FILENAME =`ls -l $ i` REV_NO =`猫$我` REPONAME =`echo $ i | awk'{srch =“'$ {REPO_PREFIX}'/”; idx = index($ 0,srch); xstr = substr($ 0,idx + length(srch)); idx = index(xstr,“/'$ {REPO_SUFFIX}'”); 打印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}' 科幻 DONE #-------------------------显示存储库,修订版本和个人大小----------------- --- SuN --- 2011-11-14 - }
要么
#-------------------------显示版本库和总大小----------------- --- SuN --- 2011-11-14 - { CSVN_DIR = /select/ csvn cd $ {CSVN_DIR} REPO_PREFIX = “$ {CSVN_DIR} /数据/库” REPO_SUFFIX = “分贝/电stream” 因为我在`ls $ {REPO_PREFIX} / * / $ {REPO_SUFFIX}` 做 如果[-f $ i] 然后 FILENAME =`ls -l $ i` REV_NO =`awk'{print $ 1; 退出}'$ i` REPONAME =`echo $ i | awk'{srch =“'$ {REPO_PREFIX}'/”; idx = index($ 0,srch); xstr = substr($ 0,idx + length(srch)); idx = index(xstr,“/'$ {REPO_SUFFIX}'”); 打印substr(xstr,1,idx-1)}'` #REPONAME = sn_library COL_PREFIX =“Repository:\ t $ {REPONAME} \ tRevision否:\ t $ {REV_NO} \ t $ {FILENAME}” COL_PREFIX =`echo“$ {COL_PREFIX}”| awk'{xstr = $ 0; gsub(“”,“_”,xstr); GSUB( “:”, “_”,XSTR); 打印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传播\ t”i“\ tfiles / folders”}“ 科幻 DONE #-------------------------显示版本库和总大小----------------- --- SuN --- 2011-11-14 - }
您可以使用Subversion列表命令的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 checkout的磁盘使用量基本上是上面计算的两倍,因为在checkout中,工作目录中的文件和.svn
特殊目录/目录下的修订版本caching中都有文件。
或者,如果您不太在意RAM使用情况,则使用XPathexpression式计算总和,例如:
$ 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)之类的工具经常在开始汇总元素之前在内存中构build完整的文档树。