2

我需要从 svn(Windows 上的服务器)导出数据,但我不想包含根目录。例子:

svn
-project1
--trunk
--branches
-project2
--trunk
--branches
--onemorefolder

我想包含到 project1.dump 文件夹:我使用的树干和分支(不是 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

但它仅适用于主干和分支文件夹的结构。如何包含我的根文件夹中的所有文件夹并排除此根文件夹?我可以在包含语句中使用正则表达式吗?谢谢。

4

1 回答 1

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-pathor Node-copyfrom-path

对于 root 的所有子文件夹,不包括根文件夹本身,也许您可​​以尝试使用find <ROOTFOLDER> -type d -mindepth 1 -maxdepth 1which 查找不包括根本身的所有子目录。

也许像(未经测试):

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
于 2011-12-29T12:29:00.160 回答