一次复制多个目录(和内容)

时间:2010-11-19 21:36:51

标签: ant

我已经使用蚂蚁近十年了,但我经常需要做一些超出平常经验的事情。这个缺乏一个明显的答案(直观的方法导致死胡同)

问题:

将目录“example”中的多个子目录(及其内容)复制到新目录“myInstance”。为了澄清,请复制源目录中的一些但不是所有子目录。

源目录:

example/
  ignoreThisDirectory/
  ignoreThisOneAlso/
  lib
  etc/
  webapps/

尝试:死胡同 这种尝试最初似乎有效。它创建了子目录lib等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 个答案:

答案 0 :(得分:10)

您可以在文件集中指定多个包含和排除规则。如果您未指定包含规则,则默认值为包含的所有内容,但排除规则至少排除一次的除外。

这是一个包容性的例子:

<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*/" />