如何复制多个未命名目录的子目录

时间:2010-05-06 22:33:21

标签: ant

使用Ant,我想复制一些顶级目录的子目录,但顶级目录的名称可以更改,所以我需要Ant以编程方式确定要复制的目录。

换句话说,给定下面的示例目录结构,将每个./<projectX>/bin目录的内容复制到./bin

bin
project1
   \-- bin
        \-- com
             \-- name
                  \-- dir1
                        \-- file1.class
                        \-- file2.class
                        \-- file3.class
                  \-- dir2
                        \-- file4.class
                        \-- file5.class
project2
   \-- bin
        \-- com
             \-- name
                  \-- dir3
                        \-- file6.class
                        \-- file7.class
                        \-- file8.class
project3
   \-- bin
        \-- com
             \-- name
                  \-- dir4
                        \-- file9.class
                  \-- dir5
                        \-- file10.class
                        \-- file11.class

最终结果将是一个bin目录,如下所示:

bin
  \-- com
       \-- name
            \-- dir1
                  \-- file1.class
                  \-- file2.class
                  \-- file3.class
            \-- dir2
                  \-- file4.class
                  \-- file5.class
            \-- dir3
                  \-- file6.class
                  \-- file7.class
                  \-- file8.class
            \-- dir4
                  \-- file9.class
            \-- dir5
                  \-- file10.class
                  \-- file11.class

我试过

    <copy todir="${basedir}/bin">
        <fileset dir="${basedir}">
            <include name="**/bin/*"/>
            <exclude name="bin"/>
        </fileset>
    </copy>

但包括顶级bin目录下的projectX/bin目录。

1 个答案:

答案 0 :(得分:2)

您可以使用mapper从源生成目标路径,例如:

<copy todir="${basedir}/bin">
    <fileset dir="${basedir}">
        <include name="*/bin/**"/>
    </fileset>
    <regexpmapper from=".*/bin/(.*)" to="\1" />
</copy>