ANT构建-删除多个目录集

ANT build- Deleting multiple dirsets

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

1
2
3
4
5
6
7
8
9
10
11
12
    <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)中删除,并跳过第二个目录。

如何设置它从两个目录中删除?


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

1
2
3
4
5
6
7
8
9
    <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>

像魅力一样工作!


这是使用exec任务删除一级子目录(可用于清理夜间构建系统的解决方案)的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<exec executable="find" osfamily="unix">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</exec>
<exec executable="FORFILES" osfamily="windows">
 
 
 
 
 
 
</exec>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<exec executable="find" osfamily="unix">
 
 
 
 
 
 
 
 
 
 
 
 
</exec>
<exec executable="FORFILES" osfamily="windows">
 
 
 
 
 
 
 
</exec>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<exec executable="find" osfamily="unix">
 
 
 
 
 
 
 
 
 
 
</exec>
<exec executable="FORFILES" osfamily="windows">
 
 
 
 
 
 
 
</exec>

它可在Windows和Linux系统上使用。相对于纯Ant删除而言,优点之一是ant不生成任何文件集,因此可能更快。


合并您的目录集。

1
2
3
4
5
<delete verbose="true">
    <dirset dir="${backup.dir}" includes="CI,DEV_MASTER">
        <date datetime="${backup.deletedate}" when="before" checkdirs="true" />
    </dirset>
</delete>