2009-11-30 11 views
6

Ich möchte ein Ziel erstellen, das Protokolldateien löscht, die älter als 7 Tage in einem bestimmten Ordner sind. Ich erhalte einen Fehler, wenn ich versuche, ein "Datum" -Element in eine Dateigruppe einzufügen. Wie kann ich das tun?nAnt Löschen von Dateien älter als 7 Tage alt

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

Antwort

8

Ich sehe keine Dokumentation für die Verwendung des "date" -Elements. Sie könnte wie folgt betrachten:

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

Und dann diese fileset Referenz später in einer Schleife, die das Dateidatum überprüft und löscht:

<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

Ich bekomme eine Fehlermeldung "Das Quellverzeichnis MYPATH/Thelogs existiert nicht – user176657

+0

Aktualisiert, um das "in" zu verschachteln und refid zu verwenden, funktioniert auf meinem System. –

5

Was ist so etwas wie:

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

Es scheint für mich zu funktionieren :-)

+2

Das Datumsformat braucht eine kleine Änderung: Dann hat es für mich als funktioniert erwartet. – aerobiotic