2016-08-12 3 views
0

Verwenden Sie den unten abgebildeten Code, um Dateien im Laufe der Zeit in einem Protokollverzeichnis auszublenden. MAX_LOG_FILE_AGE kann berechnet oder auf einen beliebigen Wert eingestellt werden. Dies löscht Dateien, die älter als gewünscht sind, korrekt.Ant/Groovy: So löschen Sie Dateien über das angegebene Datum hinaus, aber behalten Sie maximal 3

Die Frage ergibt sich aus einer Änderung der Anforderungen, die ich erhielt, um nur eine bestimmte Anzahl der neuesten Dateien zu behalten, in meinem Fall drei (3). Wie könnte dies erreicht werden?

long deleteDate = System.currentTimeMillis() - MAX_LOG_FILE_AGE 
def ant = new AntBuilder() 
ant.delete() { 
fileset (dir: "${someParentDir}/logs/", includes: '**/*') { 
    date(millis: "${deleteDate}", when: 'before') 
    } 
} 
+0

Die andere Antwort kann leicht angepasst werden, um stattdessen einen groovy basierten Selektor zu verwenden. –

+0

Die Verwendung von 'ant' wird nicht Teil der Antwort (jetzt) ​​sein, also wenn diese Antwort wieder geöffnet wird, kann sie angezeigt werden. – JoeG

Antwort

1

Dies wäre schwierig mit Ant zu tun. Aber in gerade Groovy ist es handlich:

def MAX_LOG_FILE_AGE_IN_MILLIS = 24 * 60 * 60 * 1000 
def deleteDate = System.currentTimeMillis() - MAX_LOG_FILE_AGE_IN_MILLIS 

def logDir = "logs" 
def logs = [] 

// build list of files 
new File(logDir).eachFileRecurse { file -> 
    if (file.isFile() && (file.lastModified() < deleteDate)) { 
     logs << file 
    } 
} 

// sort by last modified (ascending) 
def sortedLogs = logs.toSorted { a,b -> a.lastModified() <=> b.lastModified() } 

// N most recent are skipped 
def n = 3 
def victims = sortedLogs.dropRight(n) 

// delete victims 
victims.each { victim -> 
    println "deleting $victim.name" 
    victim.delete() 
} 
+0

Danke - mit Ihrem Vorschlag habe ich eine groovy-only-Implementierung erstellt. Ich möchte das zeigen, aber die Frage muss wieder geöffnet werden, um dies zu tun. – JoeG

Verwandte Themen