Скопируйте содержимое подпапок с помощью Ant

Как я могу скопировать содержимое всех подпапок данной папки с помощью Ant?

т.е. у меня такая структура папок

folder/
folder/sub1/1.txt
folder/sub1/f1/1.txt
folder/sub2/2.txt
...

Я не знаю точных названий вложенных папок. И мне нужно скопировать содержимое из всех из них в одну папку (сохранение структуры содержимого, т.е. копирование всех файлов в один каталог с помощью flatten не является решением). мне нужно получить

newfolder/1.txt
newfolder/1/1.txt
newfolder/2.txt
...

Позволяет ли набор файлов таким образом группировать подпапки? ** означает ноль или более каталогов, и использование * в качестве имени каталога запрещено, т.е. <fileset dir="${dir}/*/" /> недопустимо.

Заранее спасибо, Юрий


person Yury Khrol    schedule 06.08.2010    source источник


Ответы (1)


<copy toDir="newfolder">
  <fileset dir="folder">
    <include name="*/**"/>
    <exclude name="*"/>
  </fileset>
  <regexpmapper from="^[^/]*/(.*)$$" to="\1" handledirsep="true"/>
</copy>

Вам нужно указать handledirsep только в том случае, если вы когда-нибудь собираетесь запускать этот сценарий в Windows.

person Alexander Pogrebnyak    schedule 06.08.2010
comment
Большое спасибо, Александр! Я немного изменил регулярное выражение, потому что в вашем варианте оно действует аналогично сглаживанию. Но после изменения regexpmapper на ‹regexpmapper с = ^ ([^ /] *) / (. *) $$ на = \ 2 handledirsep = true /›, я получил то, что мне нужно. Не могли бы вы поправить маппер в своем ответе? - person Yury Khrol; 09.08.2010
comment
@ Юрий. Думаю, я не тестировал достаточно глубокую иерархию. Поскольку параметр to действительно прост, я оставил только 1 группу регулярных выражений, но изменил его на [^/]* в начале выражения. - person Alexander Pogrebnyak; 10.08.2010