2009-11-30 16 views
6

Me gustaría crear un objetivo que limpie archivos de registro de más de 7 días en una carpeta específica. Me sale un error cuando trato de poner un elemento de "fecha" dentro de un conjunto de archivos. ¿Cómo puedo hacer esto?nAnt Eliminando archivos de más de 7 días de antigüedad

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

Respuesta

8

No veo ninguna documentación para utilizar el elemento "fecha". Usted podría considerar algo como esto:

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

Y luego hacer referencia al conjunto de archivos más tarde en un bucle que comprueba la fecha del archivo y elimina:

<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

Me sale un error que dice "El directorio de origen MYPATH/thelogs no existe – user176657

+0

Actualizado para anidar el "en" y usar refid, funciona en mi sistema. –

5

¿Qué pasa algo como:

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

Parece que funciona para mí :-)

+2

El formato de fecha necesita un pequeño cambio: Entonces funcionó para mí como esperado. – aerobiotic

Cuestiones relacionadas