ANT如何递归删除空目录(ANT How to delete ONLY empty director

2019-08-16 18:46发布

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

我知道蚂蚁让你“includeEmptyDirs =真”,但我希望它只能删除一个目录,如果它是空的(实际上我可能需要走了递归链,并删除它包含在目录中,如果它是现在空)。

基本上作为我们构建过程的一部分,我们复制了一组包含了一堆包含各种XML和数据等嵌套目录的目录,当我们对这些数据我们的“复制”和签入生成过程移动位置并未真正发挥作用,因为我们正在检查到另一个源代码控制(SVN),擦出来的目录,并复制了是不是一个真正的选择是(我们会被吹走了“.svn文件”文件夹)。

之前我们拷贝过来的新版本,我可以“清除”出通过执行以下目录:

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

这使得每一个目录(用“.svn文件”)作为一个空目录,然后我复制了新的文件。 他们复制后我不知道我怎样才能清除那些留下的空目录(如果我们已经完全移动,其中顶层的数据目录等)。

例如,如果我有一个/projectA/data/localization/text.xml文件,我把它搬到/projectB/data/localization/text.xml,我最终会得到一个空文件夹/了projectA /数据/定位/(即将只包含一个.svn文件夹)。

Answer 1:

这里是最好的答案我已经能够想出:

<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>


Answer 2:

以下是我熟了起来:

<!-- next three targets are connected
     To remove empty folders from XXX folder.  Process is recursed 3 times.  This 
     is necessary because parent directories are not removed until all their children
     are (if they are empty), and parents are processed before children 
      My example will process structures 3 deep, if you need to go deeper
      then add members to the list  like list="1,2,3,x,x,x,x,x,x"  -->

<target name="rmmtdirs">
        <foreach list="1,2,3" target="rmmtdirs_recurse" param="num"/>
</target>

<target name="rmmtdirs_recurse">
        <foreach target="rmmtdir" param="rmdir">
            <path>
                <dirset dir="${XXX}"/>
            </path>
        </foreach>
</target>

<target name="rmmtdir">
        <echo message=" Removing: ${rmdir} "/>
        <delete includeemptydirs="true">
                <fileset dir="${rmdir}" excludes="**/*"/>
        </delete>
</target>


Answer 3:

如果不足以彻底清除目标位置(使用defaultExcludes =“假”,以确保.svn目录被删除),你可以尝试写一个定制Ant任务遍历目标下的文件系统,删除空目录,你从高达每片叶子回迁。



Answer 4:

这可能是更容易做与从被称为蚂蚁批处理文件。

您可以使用Raymond Chen的脚本 ,但如果有在名称中使用空格这是行不通的。



文章来源: ANT How to delete ONLY empty directories recursively