如何用Ant删除dirset目录?

时间:2008-10-01 17:05:45

标签: java ant build

我想删除根目录下名称中包含“tmp”的所有目录和子目录。这应该包括任何.svn文件。我的第一个猜测是使用

<delete>
    <dirset dir="${root}">
          <include name="**/*tmp*" />
    </dirset>
</delete>

这似乎不起作用,因为您无法在dirset标记中嵌套delete

这是一种正确的方法,还是应该做其他事情?

  • ant version == 1.6.5。
  • java version == 1.6.0_04

3 个答案:

答案 0 :(得分:23)

以下是对我有用的答案:

<delete includeemptydirs="true">
    <fileset dir="${root}" defaultexcludes="false">
       <include name="**/*tmp*/**" />
    </fileset>
</delete>

我还需要删除.svn目录所需的复杂功能。使用defaultexcludes时,.*文件被排除,因此空目录不是真的空,因此没有被删除。

属性includeemptydirs(感谢,flicken,XL-Plüschhase)启用尾随**通配符以匹配空字符串。

答案 1 :(得分:5)

尝试:

<delete includeemptydirs="true">
    <fileset dir="${root}">
          <include name="**/*tmp*/*" />
    </fileset>
</delete>

谢谢你flicken!

答案 2 :(得分:4)

我只是想补充说,对我有用的解决方案部分是将/**追加到包含路径的末尾。我尝试了以下方法来删除Eclipse .settings目录:

<delete includeemptydirs="true">
    <fileset dir="${basedir}" includes"**/.settings">
</delete>

但直到我将其更改为以下内容后才能正常工作:

<delete includeemptydirs="true">
    <fileset dir="${basedir}" includes"**/.settings/**">
</delete>

由于某些原因,在路径中附加/**会删除匹配目录中的文件,所有子目录中的所有文件,子目录和匹配的目录。附加/*仅删除匹配目录中的文件,但不会删除匹配的目录。