我需要从svn(Windows上的服务器)导出数据,但我不想包含根目录。 例如:
svn
-project1
--trunk
--branches
-project2
--trunk
--branches
--onemorefolder
我想要包含到project1.dump文件夹:trunk和branches(不是project1) 我用:
svnadmin dump /svn/ | svndumpfilter include --drop-empty-revs --renumber-revs /project1/trunk /project1/branches | sed "s/Node-path:[ ]project1\//Node-path: /g" -b | sed "s/Node-copyfrom-path:[ ]project1\//Node-copyfrom-path: /g" -b > project1.dump
但是我想自动化这个过程并创建bat文件:
call svnadmin dump /svn/iss/ -r %2:%3 | svndumpfilter include --drop-empty-revs --renumber-revs /%1/trunk /%1/branches | sed "s/Node-path:[ ]%1\//Node-path: /g" -b | sed "s/Node-copyfrom-path:[ ]%1\//Node-copyfrom-path: /g" -b > %4
但它只适用于trunk和branches文件夹的结构。 如何包含我的根文件夹中的所有文件夹并排除此根文件夹? 我可以在include语句中使用正则表达式吗? 感谢。
答案 0 :(得分:0)
首先,您可以同时执行sed
个命令:
而不是
sed "s/Node-path:[ ]%1\//Node-path: /g" -b | \
sed "s/Node-copyfrom-path:[ ]%1\//Node-copyfrom-path: /g" -b
你可以做到
sed "s/Node-\(copyfrom-\|\)path:[ ]%1\//Node-\1path: /g" -b
使用模式中的反向引用\1
来匹配Node-path
或Node-copyfrom-path
。
对于root的所有子文件夹,不包括根文件夹本身,也许您可以尝试使用find <ROOTFOLDER> -type d -mindepth 1 -maxdepth 1
查找不包含根本身的所有子目录。
也许像(未经测试):
call svnadmin dump /svn/iss/ -r %2:%3 | \ # keep same
svndumpfilter include --drop-empty-revs --renumber-revs \
`find %1 -type d -maxdepth 1 -mindepth 1` | \ # used find
sed "s/Node-\(copyfrom-|\)path:[ ]%1\//Node-\1path: /g" -b \ # combined line
> %4