首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANT build-删除多个目录集

ANT build-删除多个目录集
EN

Stack Overflow用户
提问于 2011-01-19 05:47:27
回答 3查看 1.7K关注 0票数 1

我已经在构建文件中添加了一个目标,以使用时间戳删除超过4天的备份:

代码语言:javascript
复制
    <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)中删除,并跳过第二个目录。

如何将其设置为同时从两个目录中删除?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-21 08:07:55

目录集集合似乎正在跳过非空目录。我通过对整个备份目录使用一个文件集来克服它:

代码语言:javascript
复制
    <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>

就像一种护身符!

票数 1
EN

Stack Overflow用户

发布于 2011-01-19 06:03:39

合并你的目录集。

代码语言:javascript
复制
<delete verbose="true">
    <dirset dir="${backup.dir}" includes="CI,DEV_MASTER">
        <date datetime="${backup.deletedate}" when="before" checkdirs="true" />
    </dirset>
</delete>
票数 0
EN

Stack Overflow用户

发布于 2020-09-23 19:53:47

下面是一个使用exec任务删除第一级子目录的解决方案(对于清理夜间构建系统很有用):

代码语言:javascript
复制
<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>

如果您不需要限制为第一级子目录,则可以使用以下内容:

代码语言:javascript
复制
<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>

如果您还需要包含文件,请使用以下命令:

代码语言:javascript
复制
<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不会生成任何文件集,因此可能更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4729424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档