
Ich muss mit einem Cron-Job in drei verschiedenen Verzeichnissen Dateien entfernen, die älter als drei Tage sind. (Diese drei Verzeichnisse sind untergeordnete Verzeichnisse eines übergeordneten Verzeichnisses /a/b/c/1
& /a/b/c/2
& /a/b/c/3
) Kann dies mit einer Zeile in der Crontab erledigt werden?
Antwort1
Dies ist recht einfach (beachten Sie jedoch, dass sich dies auf einen Änderungszeitpunkt von vor mehr als drei Tagen bezieht, da ein Erstellungszeitpunkt 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 das #
davor, sobald -delete
Sie sicher sind, dass die zu entfernenden Dateien gefunden werden.
Um es per Cron auszuführen, würde ich wahrscheinlich einfach ein ausführbares Skript erstellen (ein Shebang - #!bin/sh
zur obersten Zeile der Datei hinzufügen und mit ausführbar machen chmod a+x
) und es dann in ein geeignetes cron
Verzeichnis wie /etc/cron.daily
oder legen /etc/cron.weekly
. Vorausgesetzt natürlich, dass Sie keinen spezifischeren Zeitplan benötigen und dass diese Verzeichnisse in Ihrer Distribution vorhanden sind.
Aktualisieren
Wie unten angemerkt, ist die -delete
Option für find
nicht sehr portierbar. Ein POSIX-kompatibler Ansatz wäre:
find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +
Entfernen Sie sie erneut, #
wenn Sie sicher sind, dass Sie die richtigen Dateien haben.
Update 2:
Zitat ausKommentar von Stéphane Chazelaunten:
Beachten Sie, dass
-exec rm {} +
Race-Condition-Schwachstellen vorhanden sind, die-delete
(sofern verfügbar) nicht vorhanden sind. Verwenden Sie es daher nicht in Verzeichnissen, die von anderen beschreibbar sind. Einige Funde haben auch ein ,-execdir
das diese Schwachstellen abmildert.
Antwort2
Sie wären viel besser dran mittmpwatch
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.