Cron-Auftrag zum Löschen von Dateien, die älter als 3 Tage sind
21
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 dies mit einer Zeile in der crontab erfolgen?
Dies ist recht einfach (obwohl zu beachten ist, dass dies eine Änderungszeit von mehr als 3 Tagen ist, 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 das, #bevor -deleteSie sicher sind, dass es die Dateien findet, die Sie entfernen möchten.
Um es von cron ausführen zu lassen, würde ich wahrscheinlich nur ein ausführbares Skript erstellen (einen Shebang #!bin/shin die oberste Zeile der Datei einfügen und mit ausführbar machen chmod a+x) und es dann in ein geeignetes cronVerzeichnis wie /etc/cron.dailyoder stellen /etc/cron.weekly. Vorausgesetzt natürlich, dass Sie keinen genaueren Zeitplan benötigen und diese Verzeichnisse in Ihrer Distribution vorhanden sind.
Aktualisieren
Wie unten erwähnt, ist die -deleteOption für findnicht 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 die, wenn Sie sicher sind, dass Sie die richtigen Dateien haben.
Beachten Sie, dass -exec rm {} +es Sicherheitslücken in Bezug auf die Racebedingung gibt, die -delete(sofern verfügbar) nicht vorliegen. Verwenden Sie es also nicht für Verzeichnisse, die von anderen beschrieben werden können. Einige Funde haben auch eine -execdir, die diese Sicherheitsanfälligkeiten abschwächt.
Vielen Dank! Gibt es eine Möglichkeit, das übergeordnete Verzeichnis und dann die untergeordneten Verzeichnisse anzugeben /a/b/c/, damit nicht für jede Option das angegeben werden muss?
KingKongFrog
Sicher, in einer POSIX-Shell können Sie dies tun /a/b/c/[12], aber dies ist nur dann wirklich angebracht, wenn die Unterverzeichnisse einzelne Buchstaben haben. In können bashSie tun /a/b/c/{1,2}. Natürlich müsste dann die Bang-Line für ein Skript sein, #!/bin/bashoder wenn Sie Crontab verwenden, müssen Sie sicherstellen, dass es für die Verwendung konfiguriert ist bash(ich empfehle nicht wirklich, es zu ändern, wenn es nicht konfiguriert ist).
Graeme
2
Die Klammererweiterung ist eine csh-Funktion und wird auch von ksh, bash, zsh und fish unterstützt, sodass Sie eine große Auswahl an Shells haben. ksh, bashUnd zshauch Wechsel Betreiber in ihrem Klackse hat. Beachten Sie, dass -exec rm {} +es Sicherheitslücken in Bezug auf die Racebedingung gibt, die -delete(sofern verfügbar) nicht vorliegen. Verwenden Sie es also nicht für Verzeichnisse, die von anderen beschrieben werden können. Einige Funde haben auch eine -execdir, die diese Sicherheitsanfälligkeiten abschwächt.
Stéphane Chazelas
Behandelt rm -fFehler nicht im Stillen, womit etwaige Rennbedingungen behandelt werden -exec?
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.
/a/b/c/
, damit nicht für jede Option das angegeben werden muss?/a/b/c/[12]
, aber dies ist nur dann wirklich angebracht, wenn die Unterverzeichnisse einzelne Buchstaben haben. In könnenbash
Sie tun/a/b/c/{1,2}
. Natürlich müsste dann die Bang-Line für ein Skript sein,#!/bin/bash
oder wenn Sie Crontab verwenden, müssen Sie sicherstellen, dass es für die Verwendung konfiguriert istbash
(ich empfehle nicht wirklich, es zu ändern, wenn es nicht konfiguriert ist).ksh
,bash
Undzsh
auch Wechsel Betreiber in ihrem Klackse hat. Beachten Sie, dass-exec rm {} +
es Sicherheitslücken in Bezug auf die Racebedingung gibt, die-delete
(sofern verfügbar) nicht vorliegen. Verwenden Sie es also nicht für Verzeichnisse, die von anderen beschrieben werden können. Einige Funde haben auch eine-execdir
, die diese Sicherheitsanfälligkeiten abschwächt.rm -f
Fehler nicht im Stillen, womit etwaige Rennbedingungen behandelt werden-exec
?Sie wären viel besser dran mit
tmpwatch
quelle
tmpwatch
wurde an gegabelttmpreaper
, was (zumindest auf Debian) anscheinend der Ersatz ist.