Search code examples
nantdelete-filefileset

nAnt Deleting files older than 7 days old


I would like to create a target that cleans log files older than 7 days old in a specific folder. I get an error when I try to put in a "date" element inside a fileset. How can I go about this?

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

Solution

  • I don't see any documentation for using the "date" element. You might consider something like this:

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

    And then reference that fileset later in a loop that checks the file date and deletes:

    <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>