2008-10-01 51 views
14

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

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

这似乎并没有工作,因为你不能窝在一个delete标签dirset

这是一个正确的方法,还是应该做别的事情?

  • ant version == 1.6.5。
  • Java版本1.6.0_04 ==

回答

24

这里是为我工作的回答:

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

我有一个更加复杂,我需要删除.svn目录了。由于defaultexcludes.*文件被排除在外,因此空目录并非真空,因此未被删除。

属性includeemptydirs(谢谢,闪烁,XL-Plüschhase)使尾随**通配符匹配空字符串。

5

尝试:

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

三江源flicken!

+0

要删除目录,您需要添加ncludeemptydirs =“true”,如下所述。 – flicken 2008-10-01 17:18:43

4

我只是想补充一点,对我而言,解决方案的一部分是将/**附加到包含路径的末尾。我尝试了以下删除的Eclipse .settings目录:

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

,但它没有工作,直到我把它改为如下:

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

出于某种原因,附加/**的路径删除文件匹配目录,所有子目录中的所有文件,子目录以及匹配的目录。追加/*仅删除匹配目录中的文件,但不会删除匹配的目录。