我已经在构建文件中添加了一个目标,以使用时间戳删除超过4天的备份:
<tstamp>
<format pattern="MM/DD/yyyy HH:MM aa" offset="-4" property="backup.deletedate" />
</tstamp>
<echo message="Deleting log directories created on or before ${backup.deletedate}" />
<delete verbose="true">
<dirset dir="${backup.dir}/CI">
<date datetime="${backup.deletedate}" when="before" checkdirs="true" />
</dirset>
<dirset dir="${backup.dir}/DEV_MASTER">
<date datetime="${backup.deletedate}" when="before" checkdirs="true" />
</dirset>
</delete>但是,它只从第一个目录(CI)中删除,并跳过第二个目录。
如何将其设置为同时从两个目录中删除?
发布于 2011-01-21 08:07:55
目录集集合似乎正在跳过非空目录。我通过对整个备份目录使用一个文件集来克服它:
<tstamp>
<format pattern="MM/DD/yyyy HH:MM aa" offset="-4" property="backup.deletedate" />
</tstamp>
<echo message="Deleting log directories created on or before ${backup.deletedate}" />
<delete verbose="true" includeemptydirs="true">
<fileset dir="${backup.dir}">
<date datetime="${backup.deletedate}" when="before" checkdirs="true" />
</fileset>
</delete>就像一种护身符!
发布于 2011-01-19 06:03:39
合并你的目录集。
<delete verbose="true">
<dirset dir="${backup.dir}" includes="CI,DEV_MASTER">
<date datetime="${backup.deletedate}" when="before" checkdirs="true" />
</dirset>
</delete>发布于 2020-09-23 19:53:47
下面是一个使用exec任务删除第一级子目录的解决方案(对于清理夜间构建系统很有用):
<exec executable="find" osfamily="unix">
<arg value="path/to/dir" />
<arg value="-mindepth" />
<arg value="1" />
<arg value="-maxdepth" />
<arg value="1" />
<arg value="-type" />
<arg value="d" />
<arg value="-mtime" />
<arg value="+4" />
<arg value="-exec" />
<arg value="rm" />
<arg value="-rf" />
<arg value="{}" />
<arg value="\;" />
</exec>
<exec executable="FORFILES" osfamily="windows">
<arg value="/P" />
<arg value="path\to\dir" />
<arg value="/D" />
<arg value="-4" />
<arg value="/C" />
<arg value="cmd /c IF @isdir == TRUE rd /S /Q @path" />
</exec>如果您不需要限制为第一级子目录,则可以使用以下内容:
<exec executable="find" osfamily="unix">
<arg value="path/to/dir" />
<arg value="-mindepth" />
<arg value="1" />
<arg value="-type" />
<arg value="d" />
<arg value="-mtime" />
<arg value="+4" />
<arg value="-exec" />
<arg value="rm" />
<arg value="-rf" />
<arg value="{}" />
<arg value="\;" />
</exec>
<exec executable="FORFILES" osfamily="windows">
<arg value="/P" />
<arg value="path\to\dir" />
<arg value="/D" />
<arg value="-4" />
<arg value="/S" />
<arg value="/C" />
<arg value="cmd /c IF @isdir == TRUE rd /S /Q @path" />
</exec>如果您还需要包含文件,请使用以下命令:
<exec executable="find" osfamily="unix">
<arg value="path/to/dir" />
<arg value="-mindepth" />
<arg value="1" />
<arg value="-mtime" />
<arg value="+4" />
<arg value="-exec" />
<arg value="rm" />
<arg value="-rf" />
<arg value="{}" />
<arg value="\;" />
</exec>
<exec executable="FORFILES" osfamily="windows">
<arg value="/P" />
<arg value="path\to\dir" />
<arg value="/D" />
<arg value="-4" />
<arg value="/S" />
<arg value="/C" />
<arg value="cmd /c IF @isdir == TRUE rd /S /Q @path ELSE del /F /Q @path" />
</exec>它可以在Windows和Linux系统上运行。与纯Ant删除相比,ant的一个优点是ant不会生成任何文件集,因此可能更快。
https://stackoverflow.com/questions/4729424
复制相似问题