Dateien nach Alter löschen

15

Gibt es einen Befehl zum Löschen aller Dateien in einem Verzeichnis, die in N Tagen nicht geändert wurden ? Ich muss ein paar alte Protokolle bereinigen.

user1024
quelle

Antworten:

23

Dadurch werden alle Dateien gelöscht, die älter als 5 Tage sind. Sie können auch -name '*log'einen maxdepthin den Befehl find einfügen, um genauer zu sein.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
quelle
4
Obwohl weise sysadmins ein Trockenlauf mit zu tun , -lsanstatt -deletesicher zu machen dies nicht löschen , was sie gehalten wollten. Ja, ich spreche aus Erfahrung hier.
Shadur
2
Aus Erfahrung überprüfen sie auch ihren Weg. oder auch nicht, da ich mal die / some/dir/version gemacht habe. :(
Hennes
3

Mit zshund (.m+n) glob - Qualifikation : .wählt nur reguläre Dateien, m+nwählt Dateien geändert mehr als n Tage vor;
ZB die Dateien im aktuellen Verzeichnis auflisten, die vor mehr als 9 Tagen geändert wurden:

print -rl -- *(.m+9)

Hinzufügen D, um Punktedateien einzuschließen:

print -rl -- *(D.m+9)

oder wenn Sie wiederkehren möchten (und zB nur Dateien auflisten, die mit enden .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

Ersetzen Sie print -rldurch, rmwenn Sie mit dem Ergebnis zufrieden sind. zargsWenn Sie viele Dateien haben, müssen Sie möglicherweise Folgendes verwenden (um zu lange Argumente zu vermeiden ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
quelle