2009-11-30 11 views
6

Je souhaite créer une cible qui nettoie les fichiers journaux de plus de 7 jours dans un dossier spécifique. J'obtiens une erreur lorsque j'essaie de mettre un élément "date" dans un ensemble de fichiers. Comment puis-je m'y prendre?nAnt Suppression de fichiers de plus de 7 jours

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

Répondre

8

Je ne vois aucune documentation sur l'utilisation de l'élément "date". Vous pourriez envisager quelque chose comme ceci:

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

et de référence alors que fileset plus tard dans une boucle qui vérifie la date du fichier et supprime:

<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

Je reçois une erreur disant "Le répertoire source MYPATH/thelogs n'existe pas – user176657

+0

Mise à jour pour imbriquer le "in" et utiliser refid, fonctionne sur mon système. –

5

Qu'en est-il quelque chose comme:

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

Cela semble fonctionner pour moi :-)

+2

Le format de date a besoin d'un petit changement: Alors ça a marché pour moi attendu. – aerobiotic