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

979
IMB

Ich verwende diesen Cron-Job derzeit, um angehaltene temporäre Dateien an einem bestimmten Ort zu löschen. Wie kann ich dies verbessern, um nur Dateien zu löschen, die älter als x Tage sind (z. B. 30 Tage)?

0 4 * * 0 /bin/rm -fv /home/*/tmp/Cpanel_*

2

1 Antwort auf die Frage

6
Tomasz

Sie können verwenden find:

find /home/*/tmp/Cpanel_*' -type f \! -newermt "month ago" -delete 

findkann schwierig sein, also lesen Sie Ihre Hausaufgaben und testen Sie sie gut. Die übliche Praxis ist, mit einem Befehl zu testen, der nicht auf gefundene Ziele wirkt, wie lsoder echo. findhat einige eingebaute Befehle, die Sie zum Testen verwenden können. So können Sie damit beginnen:

 find /home/*/tmp/Cpanel_*' -type f \! -newermt "month ago" -ls 
Gute Antwort. Für mehr Effizienz können Sie die Tatsache verwenden, dass `find` vor der ersten Option eine beliebige Anzahl von Verzeichnissen _oder files_ haben kann, wie in:` find / home / * / tmp / Cpanel_ *! -Newermt "Monat" "-delete"; Sie können `-maxdepth 0` hinzufügen, um sicherzustellen, dass nur die Dateien aus der Shell-Erweiterung gelöscht werden, ohne dass dabei Verzeichnisse absteigen (hier möglicherweise nicht relevant). AFH vor 6 Jahren 1
Ich erhalte die folgende Nachricht: `-bash:! -Newermt: Ereignis nicht gefunden` Haben Sie eine Ahnung, was es bedeutet? IMB vor 6 Jahren 0
@IMB Dies bedeutet, dass Sie Bash verwenden und den Eintrag in seiner Historie nicht finden können. Du brauchst keine Bash. Verwenden Sie `find` als Befehl. Tomasz vor 6 Jahren 0
@IMB Oder vielleicht auch nicht ... Es muss eine Pause zwischen `!` Und `-` geben. Siehe aktualisierte Zeile oben. Tomasz vor 6 Jahren 0
@IMB Und in der Tat sollte es `\! -newrmt`. Tomasz vor 6 Jahren 0
Ich bekomme eine Warnung: `find: warning: Unix-Dateinamen enthalten normalerweise keine Schrägstriche (obwohl Pfadnamen dies tun). Das bedeutet, dass '-name' * / tmp / Cpanel_ * '' auf diesem System wahrscheinlich immer auf False gesetzt wird. Vielleicht finden Sie den Test "-wholename" oder "-samefile" als nützlich. Wenn Sie GNU grep verwenden, können Sie alternativ 'find ... -print0 | verwenden grep -FzZ `* / tmp / Cpanel _ * ''.` IMB vor 6 Jahren 0
@IMB Ich habe das sehr vermasselt. Sehen Sie meine Antwort aktualisiert. Es sollte jetzt in Ordnung sein (ich rate). Sei vorsichtig.... Tomasz vor 6 Jahren 0
@IMB Ich habe auch `-type f` hinzugefügt, um nur Dateien zu finden. Tomasz vor 6 Jahren 0