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

use*_*465 7 ant

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

问题:

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

来源目录:

example/
  ignoreThisDirectory/
  ignoreThisOneAlso/
  lib
  etc/
  webapps/
Run Code Online (Sandbox Code Playgroud)

尝试:Dead End 这个尝试最初似乎有效.它创建了子目录lib等webapps.但是"复制"没有复制其内容; 我留下了空的子目录.

<copy todir="myInstance" >
  <dirset dir="example" includes="lib etc webapps"/>      
</copy>    
Run Code Online (Sandbox Code Playgroud)

成功但是详细 最后,我不得不单独复制每个目录,这看起来冗长而且非干:

   <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>    
Run Code Online (Sandbox Code Playgroud)

提前致谢

mar*_*ton 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>
Run Code Online (Sandbox Code Playgroud)

请注意**通配符将引入指定的三个"前沿"子目录中的每个子目录下的完整目录树.或者,如果要专门排除几个目录,但要复制所有其他目录,则可以省略包含(从而获得默认的全包行为)并提供排除列表:

<copy todir="${dest.dir}">
    <fileset dir="${src.dir}">
        <exclude name="ignoreThisDir*/" />
        <exclude name="ignoreThisOne*/" />
    </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

你可以进一步夸大你给出的一个排除模式的特定例子:

<exclude name="ignore*/" />
Run Code Online (Sandbox Code Playgroud)