有谁知道如何删除递归与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文件夹)。
这里是最好的答案我已经能够想出:
<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>
以下是我熟了起来:
<!-- 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>
如果不足以彻底清除目标位置(使用defaultExcludes =“假”,以确保.svn目录被删除),你可以尝试写一个定制Ant任务遍历目标下的文件系统,删除空目录,你从高达每片叶子回迁。
这可能是更容易做与从被称为蚂蚁批处理文件。
您可以使用Raymond Chen的脚本 ,但如果有在名称中使用空格这是行不通的。