Ant:将相同的文件集复制到多个位置 - 续

时间:2011-05-25 06:02:28

标签: ant copy mapper

我的问题是继续这个帖子: Ant: copy the same fileset to multiple places

我是mappers的新手。有人(carej?)可以分享使用映射器执行此操作的示例吗?这是我想要的:

parent_folder
    |----child1_folder
    |         |----files
    |                |----config.file
    |                |----data.txt
    |----child2_folder
    |----child3_folder
    .
    .
    .
    |----childn_folder

我没有选择使用ant-contrib(抱歉......蚂蚁位置或任何taskdesf不在我的控制之下)。所以我不知道如何循环不确定数量的文件夹。

对我的限制:

  1. 我只知道child1_folder的名字(不知道其他孩子的名字)
  2. 其他孩子的数量不确定
  3. 我希望在每个子文件夹下创建files文件夹(通过其他任务,如果不是副本)。
  4. 以下是我正在尝试的内容(目前正在尝试单个文件,一旦开始工作,将使用其他地图集扩展):

    <copy todir="/tmp/parent_folder" verbose="true">
        <fileset dir="/tmp/parent_folder">
            <include name="*/files/config.file"/>
        </fileset>
        <mapper type="glob" from="*/files/config.file" to="*/files/config.file"/>
    </copy>
    

    它一直说skipped - don't know how to handle it后跟No sources found.

    提前致谢, Parag Doke

    另一个(可能是?)相关问题: Using mapper & fileset to copy files into a different subdirectory?

1 个答案:

答案 0 :(得分:3)

这是一种方式的例子。关键特性是在复制任务中使用enablemultiplemappings,并使用scriptmapper来处理迭代目标目录。映射器链用于使提供给scriptmapper的源只是要相对于目标目录复制的文件的路径。

<property name="src.dir" value="child1_folder" />

<dirset dir="parent_folder" id="target.dirs">
    <include name="*" />
    <exclude name="${src.dir}" />
</dirset>

<copy todir="parent_folder" enablemultiplemappings="yes">
    <fileset dir="parent_folder">
        <include name="${src.dir}/**"/>
    </fileset>
    <chainedmapper>
        <globmapper from="${src.dir}/*" to="*" />
        <scriptmapper language="javascript">
        <![CDATA[
            // Obtain a reference to the dirset
            var dirSet = project.getReference( "target.dirs" );

            // Now get matching dirs.
            var ds = dirSet.getDirectoryScanner( project );
            var includes = ds.getIncludedDirectories( );
            for ( var i = 0; i < includes.length; i++ )
            {
                self.addMappedName( includes[i] + "/" + source );
            }
        ]]>
        </scriptmapper>
    </chainedmapper>
</copy>

复制任务中的多个映射自1.6版本以来一直在Ant中。