Dou*_*kem 10 ant build-process
有谁知道如何用ANT递归删除"空"目录(空包括仅包含".svn"等的目录).
我知道ant允许你"includeEmptyDirs = true"但我希望它只删除一个目录,如果它是空的(实际上我可能需要走上递归链并删除它所包含的目录,如果它现在是空).
基本上作为构建过程的一部分,我们复制一组目录,其中包含一堆包含各种XML和数据的其他嵌套目录,当我们移动该数据的位置时,我们的"复制"和签入构建过程并不真正有效,因为我们正在检查另一个源控件(SVN),擦除目录并复制也不是一个选项(我们要吹掉".svn"文件夹).
在我们复制新版本之前,我可以通过执行以下操作"清除"目录:
<delete>
<fileset dir="${webplatformBin}" includes="**/*"/>
</delete>
Run Code Online (Sandbox Code Playgroud)
这会将每个目录(带有".svn")留作空目录,然后复制新文件.复制之后,我不确定如何清除剩下的空目录(如果我们已完全移动到顶级数据目录所在的位置等).
例如,如果我有/projectA/data/localization/text.xml文件并将其移动到/projectB/data/localization/text.xml,我最终会得到一个空的文件夹/ projectA/data/localization /(只包含.svn文件夹).
Ste*_*son 18
这是我能够提出的最佳答案:
<delete includeemptydirs="true">
<fileset dir="${dirToStartFrom}" >
<and>
<size value="0"/>
<type type="dir"/>
</and>
</fileset>
</delete>
Run Code Online (Sandbox Code Playgroud)
然后我将它包装在宏中,以便我可以从任何目标传递目录名称:
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
像这样:
<target name="clean">
<deleteEmptyFolders dir="build"/>
<deleteEmptyFolders dir="common"/>
<deleteEmptyFolders dir="lib"/>
</target>
Run Code Online (Sandbox Code Playgroud)