Могу ли я использовать регулярное выражение в операторе включения svndumpfilter?

Мне нужно экспортировать данные из svn (сервер в Windows), но я не хочу включать корневой каталог. Пример:

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

Я хочу включить в проект1.dump папки: ствол и ветки (не проект1) Я использую:

 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

Но это работает только со структурой, где есть папки ствола и ветки. Как я могу включить все папки из моей корневой папки и исключить эту корневую папку? Могу ли я использовать регулярное выражение в операторе include? Спасибо.


person inser    schedule 29.12.2011    source источник


Ответы (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.

Для всех подпапок корня, за исключением самой корневой папки, возможно, вы можете попробовать использовать 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
person mathematical.coffee    schedule 29.12.2011
comment
(попробуйте отдельные биты по отдельности, чтобы убедиться, что все они работают так, как вы ожидаете) - person mathematical.coffee; 29.12.2011
comment
Спасибо за ответ. Но найти не работает для меня. Выдает ошибку, что -t не является параметром для svndumpfilter. - person inser; 30.12.2011
comment
хм, но мы нигде не использовали -t... Вы ожидаете, что вывод бита find сам по себе? Попробуйте find %1 -type d -maxdepth 1 -mindepth 1 -printf '"%p "', который печатает все совпадения в одной строке, разделенной пробелами, с " вокруг в случае пробелов в именах файлов. - person mathematical.coffee; 30.12.2011