确定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完整的文档树。