Можно ли использовать регулярное выражение в операторе включения svndumpfilter?
Мне нужно экспортировать данные из 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
Но это работает только со структурой, где находятся папки ствола и веток. Как я могу включить все папки из моей корневой папки и исключить эту корневую папку? Могу ли я использовать регулярное выражение в операторе включения? Благодарю.
1 ответ
Сначала вы могли бы сделать как 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