it-swarm.com.de

Cron-Job zum Löschen von Dateien, die älter als 3 Tage sind

Ich muss Dateien, die älter als 3 Tage sind, mit einem Cron-Job in 3 verschiedenen Verzeichnissen entfernen. (Diese 3 Verzeichnisse sind untergeordnete Verzeichnisse eines übergeordneten Verzeichnisses /a/b/c/1 & /a/b/c/2 & /a/b/c/3) Kann das mit einer Zeile in der Crontab gemacht werden?

21
KingKongFrog

Dies ist einfach genug (obwohl zu beachten ist, dass dies vor mehr als 3 Tagen geändert wurde, da eine Erstellungszeit nur auf bestimmten Dateisystemen mit speziellen Tools verfügbar ist):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Entfernen Sie den # Vor dem -delete, Wenn Sie sicher sind, dass die zu entfernenden Dateien gefunden wurden.

Um es von cron ausführen zu lassen, würde ich wahrscheinlich nur ein ausführbares Skript erstellen (ein Shebang - #!bin/sh In die oberste Zeile der Datei einfügen und mit chmod a+x Ausführbar machen) und es dann in ein Skript einfügen entsprechendes cron Verzeichnis wie /etc/cron.daily oder /etc/cron.weekly. Vorausgesetzt natürlich, Sie benötigen keinen genaueren Zeitplan und diese Verzeichnisse befinden sich in Ihrer Distribution.

Aktualisieren

Wie unten erwähnt, ist die Option -delete Für find nicht sehr portabel. Ein POSIX-kompatibler Ansatz wäre:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Entfernen Sie erneut #, Wenn Sie sicher sind, dass Sie die richtigen Dateien haben.

Update2

Um aus Stéphane Chazelas Kommentar unten zu zitieren:

Beachten Sie, dass -exec rm {} + Sicherheitslücken in Bezug auf Race Condition aufweist, die -delete (Wo verfügbar) nicht aufweist. Verwenden Sie es also nicht für Verzeichnisse, die von anderen geschrieben werden können. Einige Funde haben auch einen -execdir, Der diese Sicherheitsanfälligkeiten abschwächt.

26
Graeme

Mit tmpwatch wären Sie viel besser dran

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.
9
Barry Chapman