我有一个文件,其文件路径类似于“LibraryX/A/Stuff/FileY.txt”,我在 Ant 构建中将其用作包含文件。但是,我需要在复制过程中删除路径的“LibraryX/A/”部分:文件从“LibraryX/A/Stuff/FileY.txt”复制并进入“Stuff/FileY.txt” ”。我研究过一些正则表达式映射器,但没有取得任何成功。 :/
这样做的目的是目标文件夹可以覆盖“Stuff/MoreStuff”中的自定义文件,我想使用 overwrite="false" 将磁盘访问保持在最低限度并保持自定义文件完整。
Ant:
<copy todir="C:/targetdir/" overwrite="false">
<fileset dir="C:/sourcedir/">
<includesfile name="C:/targetdir/includes.file" />
</fileset>
</copy>
包含文件:
LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt
来源目录:
sourcedir/LibraryX/A/Stuff/FileA.txt
sourcedir/LibraryX/A/Stuff/FileB.txt
sourcedir/LibraryX/A/Stuff/FileC.txt
sourcedir/LibraryX/A/Stuff/FileY.txt
目标目录:
targetdir/Stuff/FileY.txt
现在,所有文件都在Stuff-文件夹位于源目录,应该结束于Stuff- 文件夹中目标目录。但如何呢?
Bonus:如果我从“targetdir/LibraryX/A/Stuff”移动文件,它们将覆盖“targetdir/Stuff”文件夹中的所有内容,即使覆盖=“false”。大概是因为它们是比当前 Stuff 文件夹中的文件更新的文件。
Note:当然,我可以将自定义文件从目标目录移走,复制内容,然后将自定义文件移回,覆盖新文件。但这会大量访问磁盘,从而减慢进程。
从 Ant v1.8.2 开始,您可以使用cutdirsmapper
从文件路径中删除一些前导目录。请参阅最底部映射器类型文档 http://ant.apache.org/manual/Types/mapper.html.
<copy todir="C:/targetdir/" overwrite="false">
<fileset dir="C:/sourcedir/">
<includesfile name="C:/targetdir/includes.file" />
</fileset>
<cutdirsmapper dirs="2"/>
</copy>
Bonus:你可以使用touch http://ant.apache.org/manual/Tasks/touch.htmlant 任务使 targetdir 中的所有文件比所有源文件更新,从而防止它们被覆盖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)