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> |
像魅力一样工作!
这是使用
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> |