2010-08-06 1 views
10

Как скопировать содержимое всех подпапок данной папки с помощью 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}/*/" /> неприемлемо.

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

ответ

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

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

+0

Большое спасибо, Александр! Я немного изменил регулярное выражение, потому что в вашем варианте он действовал аналогично сглаживанию. Но после изменения regexpmapper до , У меня есть то, что мне нужно. Не могли бы вы исправить карточку в своем ответе? –

+0

@Yury. Наверное, я не тестировал достаточно глубокую иерархию. Поскольку параметр 'to' действительно прост, я оставил только 1 группу регулярных выражений, но в начале выражения был изменен на' [^ /] * '. –