копирование нескольких каталогов (и содержимого) за один раз - PullRequest
7 голосов
/ 20 ноября 2010

Я использую муравей почти десять лет, но время от времени мне нужно делать что-то помимо моего обычного опыта.На этот вопрос не хватало очевидного ответа (а интуитивные подходы привели к тупикам)

Проблема:

Скопируйте несколько подкаталогов (и их содержимое) из каталога "example" в новый каталог "myInstance".Чтобы уточнить, скопируйте некоторые, но не все подкаталоги в исходном каталоге.

Исходный каталог:

example/
  ignoreThisDirectory/
  ignoreThisOneAlso/
  lib
  etc/
  webapps/

Попытка: тупик ЭтоСначала попытка оказалась успешной.Созданы подкаталоги lib, etc, webapps.Однако «копия» не копирует их содержимое;у меня остались пустые подкаталоги.

<copy todir="myInstance" >
  <dirset dir="example" includes="lib etc webapps"/>      
</copy>    

Успешно, но многословно В конце концов, мне пришлось скопировать каждый каталог по отдельности, что кажется многословным и не СУХИМЫМ:

   <copy todir="myInstance/etc">
     <fileset dir="example/etc"/>
    </copy>    
   <copy todir="myInstance/lib">
     <fileset dir="example/lib" />
    </copy>    
   <copy todir="myInstance/webapps">
     <fileset dir="example/webapps" />
    </copy>    

заранее спасибо

1 Ответ

10 голосов
/ 20 ноября 2010

Вы можете указать несколько правил включения и исключения в наборе файлов.Если вы не укажете правило включения, по умолчанию будет включено все, кроме того, что исключено хотя бы один раз правилом исключения.

Вот пример включения:

<property name="src.dir" value="example" />
<property name="dest.dir" value="myInstance" />

<copy todir="${dest.dir}">
    <fileset dir="${src.dir}">
        <include name="lib/**" />
        <include name="etc/**" />
        <include name="webapps/**" />
    </fileset>
</copy>

Обратите внимание на подстановочный знак **, который будет вводить полное дерево каталогов под каждым из трех указанных подкаталогов «переднего края».В качестве альтернативы, если вы хотите специально исключить несколько каталогов, но скопировать все остальные, вы можете опустить включение (и тем самым получить стандартное поведение по умолчанию) и предоставить список исключений:

<copy todir="${dest.dir}">
    <fileset dir="${src.dir}">
        <exclude name="ignoreThisDir*/" />
        <exclude name="ignoreThisOne*/" />
    </fileset>
</copy>

Выможет привести к тому, что конкретный пример, приведенный вами, приведёт к одному шаблону исключения:

<exclude name="ignore*/" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...