我有两个目录树:
source/aaa/bbb/ccc/file01.txt
source/aaa/bbb/file02.txt
source/aaa/bbb/file03.txt
source/aaa/ddd/file03.txt
source/file01.txt
和
template/aaa/bbb/ccc/file01.txt
template/aaa/bbb/DELETE-file03.txt
template/aaa/DELETE-ddd
template/DELETE-file01.txt
使用 Ant,我想做三件事。首先,我想将任何文件从“模板”复制到“源”,这样所有不以“DELETE-”开头的文件都会被替换。例如,“source/aaa/bbb/ccc/file01.txt”将被替换。这很简单:
<copy todir="source" verbose="true" overwrite="true">
<fileset dir="template">
<exclude name="**/DELETE-*"/>
</fileset>
</copy>
其次,我想删除“源”树中名称与“模板”树相应目录中的“DELETE-”文件匹配的所有文件。例如,“source/aaa/bbb/file03.txt”和“source/file01.txt”都将被删除。我已经能够做到这一点:
<delete verbose="true">
<fileset dir="source">
<present present="both" targetdir="template">
<mapper type="regexp" from="(.*[/\\])?([^/\\]+)" to="\1DELETE-\2"/>
</present>
</fileset>
</delete>
第三,我想删除名称以相同方式匹配的所有目录(无论是否为空)。例如,“template/aaa/DELETE-ddd”及其下的所有文件都将被删除。我不确定如何在“源”树中构造与目录(及其下的所有文件)匹配的文件集,其中目录在“模板”树中具有 DELETE-* 文件。
Ant(1.7.1)甚至可以完成第三个任务吗?我最好不要编写任何自定义 ant 任务/选择器来执行此操作。