我的问题是继续这个线程: Ant:将同一个文件集复制到多个地方
我是mappers的新手.有人(carej?)可以分享使用映射器执行此操作的示例吗?这是我想要的:
parent_folder
|----child1_folder
| |----files
| |----config.file
| |----data.txt
|----child2_folder
|----child3_folder
.
.
.
|----childn_folder
我没有选择使用ant-contrib(抱歉......蚂蚁位置或任何taskdesf不在我的控制之下).所以我不知道如何循环不确定数量的文件夹.
限制我:
files在每个子文件夹下创建文件夹(通过另一个任务,如果不是复制).这是我正在尝试的(目前正在尝试单个文件,一旦开始工作,将使用其他映射器扩展):
<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>
Run Code Online (Sandbox Code Playgroud)
口口声声说skipped - don't know how to handle it后面No sources found..
在此先感谢Parag Doke
另一个(可能是?)相关问题: 使用mapper和fileset将文件复制到不同的子目录中?
这是一种方法的示例。enablemultiplemappings主要功能是在复制任务中使用,以及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>
Run Code Online (Sandbox Code Playgroud)
自版本 1.6 以来,Ant 中已包含复制任务中的多个映射。