Wie kann ich alle Dateien in einem Ordner löschen, auf die in einem bestimmten Zeitraum nicht zugegriffen wurde?

14

Ich möchte einen nächtlichen Cron-Job ausführen, bei dem alle Dateien in einem Ordner gelöscht werden, auf die seit mindestens einer Woche nicht mehr zugegriffen wurde. Was ist der effizienteste Weg, dies in bash zu tun?

bloudermilk
quelle
2
findkann basierend auf atime filtern. Die "Korrektheit" von atime hängt zumindest von der Konfiguration ab (siehe noatime).

Antworten:

20

Sie wollen das findWerkzeug .

find folder -depth -type f -atime +7 -delete

(Dies wird löschen Sie alle Dateien ( nur Stammkunden , keine Rohre, spezielle Geräte, Verzeichnisse, symbolische Links) in den angegebenen Ordner und alle Unterverzeichnisse (rekursiv) , wo die letzte Zugriffszeit ist länger als 7 Tage vor.)

Paŭlo Ebermann
quelle
6
Möglicherweise möchten Sie dort hinzufügen, -type fum sicherzustellen, dass nur Dateien und nicht ganze Verzeichnisse gelöscht werden.
Shadur
3

Vielleicht möchten Sie herausfinden, tmpwatchwelche in einen Cron-Job eingefügt werden können. Sie müssen nicht selbst mitspielen find. Bei RHEL liegt es in der tmpwatchDrehzahl.

Aaron D. Marasco
quelle
Dies ist definitiv die elegantere Lösung, aber ich bevorzuge die Portabilität von find.
Bloudermilk