我有一个文件,其文件路径如"LibraryX/A/Stuff/FileY.txt",我在Ant构建中使用它作为includefile.但是,我需要在复制过程中删除路径的"LibraryX/A /"部分:文件从"LibraryX/A/Stuff/FileY.txt"复制并登陆到"Stuff/FileY.txt" ".我已经研究了几个regexpmap,但根本没有取得任何成功.:/
这样做的目的是目标文件夹可以覆盖"Stuff/MoreStuff"中的自定义文件,我想使用overwrite ="false"来保持磁盘访问最小化并保持自定义文件不变.
蚂蚁:
<copy todir="C:/targetdir/" overwrite="false">
<fileset dir="C:/sourcedir/">
<includesfile name="C:/targetdir/includes.file" />
</fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)
Includes.file:
LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)
Sourcedir:
sourcedir/LibraryX/A/Stuff/FileA.txt
sourcedir/LibraryX/A/Stuff/FileB.txt
sourcedir/LibraryX/A/Stuff/FileC.txt
sourcedir/LibraryX/A/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)
目标目录:
targetdir/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)
现在,sourcedir中Stuff -folder中的所有文件都应该以targetdir中的Stuff -folder 结尾.但是怎么样?
额外:如果我从"targetdir/LibraryX/A/Stuff"移动文件,它们将覆盖"targetdir/Stuff"文件夹中的所有内容,即使使用overwrite ="false".大概是因为它们是比目前Stuff文件夹中的文件更新的文件.
注意:我当然可以将自定义文件从目标目录移开,复制内容然后再移动自定义文件,覆盖新文件.但这会大量访问磁盘,从而减慢了进程.
从Ant v1.8.2开始,您可以使用cutdirsmapper
从文件路径中删除一些前导目录.请参阅映射器类型文档的最底部.
<copy todir="C:/targetdir/" overwrite="false">
<fileset dir="C:/sourcedir/">
<includesfile name="C:/targetdir/includes.file" />
</fileset>
<cutdirsmapper dirs="2"/>
</copy>
Run Code Online (Sandbox Code Playgroud)
额外奖励:您可以使用touch ant任务使targetdir中的所有文件都比所有源文件更新,从而防止它们被覆盖.