如何使用文件集在ant中选择子目录?
我正在使用Ant1.6.2,并试图设置一个任务,该任务将比较源目录和目标目录,识别源目录中存在的所有子目录,并删除目标目录中类似的命名子目录 假设源目录中有子目录sub1、sub2和sub3,目标目录中有sub1、sub2、sub3和sub4,那么我想从目标目录中删除sub1、sub2和sub3 我想我可以通过使用FileSelector来标识源中存在于目标中的所有目录。但是,我无法让文件选择器返回目录的匹配项 最终,我想我会做一些类似的事情:如何使用文件集在ant中选择子目录?,ant,fileset,Ant,Fileset,我正在使用Ant1.6.2,并试图设置一个任务,该任务将比较源目录和目标目录,识别源目录中存在的所有子目录,并删除目标目录中类似的命名子目录 假设源目录中有子目录sub1、sub2和sub3,目标目录中有sub1、sub2、sub3和sub4,那么我想从目标目录中删除sub1、sub2和sub3 我想我可以通过使用FileSelector来标识源中存在于目标中的所有目录。但是,我无法让文件选择器返回目录的匹配项 最终,我想我会做一些类似的事情: <fileset id="dirSelect
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
<present targetdir="${dist.dir}"/>
</fileset>
我首先尝试列出源目录中存在的目录并将其打印出来:
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
</fileset>
<property name="selected" refid="dirSelector" />
<echo>Selected: ${selected}</echo>
选定:${Selected}
然而,当类型选择器设置为directory时,我从不打印任何内容。如果我将类型更改为文件,我会打印文件
有没有更好的方法来完成我想做的事情?我在使用类型选择器时是否遗漏了什么?如果不编写自定义Ant任务,这将有点混乱。如果你愿意使用这个库,下面的方法应该可以做到。这是一个有点黑客(特别是它使用属性的方式),但它似乎工作正常
<project name="stackoverflow" default="delete_target_dirs">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<property name="src.dir" value="src"/>
<property name="target.dir" value="target"/>
<target name="delete_target_dirs">
<for param="file">
<path>
<dirset dir="${src.dir}">
<include name="**"/>
</dirset>
</path>
<sequential>
<basename property="@{file}_basename" file="@{file}" />
<available property="@{file}_available" file="${@{file}_basename}" filepath="${target.dir}" />
<if>
<equals arg1="${@{file}_available}" arg2="true"/>
<then>
<delete verbose="true">
<dirset dir="${target.dir}" includes="${@{file}_basename}"/>
</delete>
</then>
</if>
</sequential>
</for>
</target>
</project>
谢谢您的帮助。我目前没有使用ant contrib库,所以我想我应该先试试您建议的自定义任务路径。这最终相当容易,效果也很好。谢谢。@Eric Rosenberg你能把自定义任务作为你的答案吗?这样做很好,这将是我们正在寻找的东西。@OzairKafray抱歉,但我再也没有访问自定义任务实现的权限了。