ANT 如何递归删除空目录

标签 ant build-process

有谁知道如何使用 ANT 递归删除“空”目录(空包括仅包含“.svn”等的目录)。

我知道 ant 允许您“includeEmptyDirs=true”,但我希望它仅在目录为空时才删除该目录(实际上我可能需要遍历递归链并删除它所包含的目录,如果现在是的话)空的)。

基本上,作为我们构建过程的一部分,我们复制了一组目录,这些目录包含一堆包含各种 XML 和数据的其他嵌套目录,当我们移动该数据的位置时,我们的“复制”和 checkin 构建过程实际上不起作用,并且因为我们正在检查另一个源代码管理 (SVN),所以删除目录和复制也不是一个真正的选择(我们会吹走“.svn”文件夹)。

在我们复制新版本之前,我可以通过执行以下操作“清除”目录:

<delete>
  <fileset dir="${webplatformBin}" includes="**/*"/>
</delete>

这将每个目录(带有“.svn”)作为一个空目录,然后我复制新文件。复制它们后,我不确定如何清除剩下的空目录(如果我们已经完全移动了顶级数据目录等)。

例如,如果我有一个/projectA/data/localization/text.xml 文件并将其移动到/projectB/data/localization/text.xml,我最终会得到一个空文件夹/projectA/data/localization/(即将只包含一个 .svn 文件夹)。

最佳答案

这是我能想出的最佳答案:

<delete includeemptydirs="true">
  <fileset dir="${dirToStartFrom}"  >
    <and>
      <size value="0"/>
      <type type="dir"/>
     </and>
  </fileset>
</delete>

然后我将它包装在一个宏中,以便我可以从任何目标传入目录名称:
<!-- Find and delete empty folders under dir -->
<macrodef name="deleteEmptyFolders">
    <attribute name="dir"/>
    <sequential>
        <delete includeemptydirs="true">
            <fileset dir="@{dir}"  >
                <and>
                    <size value="0"/>
                    <type type="dir"/>
                </and>
            </fileset>
        </delete>
    </sequential>
</macrodef>

像这样:
<target name="clean">
  <deleteEmptyFolders dir="build"/>
  <deleteEmptyFolders dir="common"/>
  <deleteEmptyFolders dir="lib"/>
</target>

关于ANT 如何递归删除空目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1472803/

相关文章:

ant - 阐明升级到 Java 7 后 Ant 任务被破坏

android - 为什么我的 Gradle APK 比 Ant 的大?

tfs - TFS 2008 构建服务器的构建监视器

build-process - 关于 Eclipse RCP 的自动代码覆盖的建议?

visual-studio-2010 - SignTool.exe错误后,Visual Studio中的PostBuild事件失败

java - 从 javadocs 中的 ant 构建中排除文件

java - 在 ant 脚本中模块化类路径(例如通过 refid)

android - "cordova platform add android"错误

c++ - MSBuild.exe 不并行构建项目

tfs - MSBuild 无法删除 Binaries 目录