【问题标题】:How do I delete a dirset of directories with Ant?如何使用 Ant 删除目录集?
【发布时间】:2010-09-14 14:13:19
【问题描述】:

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

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

这似乎不起作用,因为您不能将 dirset 嵌套在 delete 标记中。

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

  • ant 版本 == 1.6.5。
  • java 版本 == 1.6.0_04

【问题讨论】:

    标签: java ant build


    【解决方案1】:

    这是对我有用的答案:

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

    我还需要删除.svn 目录,这很复杂。使用defaultexcludes.* 文件被排除在外,因此空目录并不是真正的空目录,因此也不会被删除。

    includeemptydirs 属性(感谢,flicken,XL-Plüschhase)使结尾的 ** 通配符可以匹配空字符串。

    【讨论】:

      【解决方案2】:

      尝试:

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

      谢谢你!

      【讨论】:

      • 要删除目录,您需要添加 ncludeemptydirs="true",如下所述。
      【解决方案3】:

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

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

      但在我将其更改为以下内容之前它不起作用:

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

      由于某种原因,将/** 附加到路径会删除匹配目录中的文件、所有子目录、子目录和匹配目录中的所有文件。追加/*只会删除匹配目录中的文件,不会删除匹配目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多