2009-11-30 88 views
6

我想创建一个目标,该目标在特定文件夹中清理超过7天的日志文件。当我尝试在文件集内放入“日期”元素时出现错误。我怎么去解决这个问题?nAnt删除7天以前的文件

<delete> 
    fileset basedir="${StageIISRoot}/MySite/App_Data/ErrorLog"> 
     <date datetime="${datetime::now() - timespan::from-days(7)}" when="before"/> 
     <include name="*.xml" /> 
    </fileset> 
</delete> 

回答

8

我没有看到使用“date”元素的任何文档。你可能会考虑这样的事情:

<fileset id="thelogs" basedir="${StageIISRoot}/MySite/App_Data/ErrorLog"> 
    <include name="*.xml" /> 
</fileset> 

再后来引用文件集中在一个循环来检查文件的日期和删除:

<foreach item="File" property="filename"> 
    <in> 
     <items refid="thelogs" /> 
    </in> 
    <do> 
     <if test="${timespan::get-days(datetime::now() - file::get-last-write-time(filename)) >= 7}"> 
      <delete file="${filename}" /> 
     </if> 
    </do> 
</foreach> 
+0

我收到一个错误说:“源目录MYPATH/thelogs不存在 – user176657

+0

已更新为嵌套“in”并使用refid,适用于我的系统。 –

5

什么是这样的:

<tstamp> 
    <format property="last.week" pattern="MM/dd/yyyy hh:mm" locale="en,UK" offset="-7" unit="day"/> 
</tstamp> 
<echo>Delete backups before ${last.week}</echo> 
<delete> 
    <fileset dir="${dst.dir}"> 
     <date datetime="${last.week}" when="before"/> 
    </fileset> 
</delete> 

它似乎为我工作:-)

+2

日期格式需要一个小小的改变:然后它对我有效预期。 – aerobiotic