Löschen von Dateien, die älter als ein Jahr sind, unter Linux

18

Zu der Zeit befinden sich noch viele Dateien auf meinem System und ich brauche sie nicht mehr. Wie lösche ich also alle Dateien, die mindestens ein Jahr alt sind?

Maythux
quelle

Antworten:

34

Sie können es mit diesem Befehl tun

find /path/to/files* -mtime +365 -exec rm {} \;

Einige erklären

/path/to/files* ist der Pfad zu den Dateien.

-mtimewird verwendet, um die Anzahl der Tage anzugeben, die die Datei alt ist. +365 findet Dateien, die älter als 365 Tage sind, was einem Jahr entspricht

-exec Ermöglicht es Ihnen, einen Befehl wie rm einzugeben.


Bearbeiten Danke an @Oli note -> du kannst es machen durch:

find /path/to/files* -mtime +365 -delete
Maythux
quelle
7
Sie sollten immer das {}in zitieren -exec(so liest es -exec rm "{}" \;). Dies stellt sicher, dass Leerzeichen richtig behandelt werden ... Und Sie könnten -deletestattdessen einfach die Funktion verwenden -exec.
Oli
1
@Oli Huh ??? (Was Sie gesagt haben, kann nicht richtig sein, wenn man bedenkt, dass die Shell sich "{}"in verwandelt, {}bevor sie an finderster Stelle übergeben wird; findersetzt sie dann. Das Zitieren {}wird für den Fall empfohlen {und }selbst kann manchmal von der Shell speziell behandelt werden - was nichts zu tun hat Sie mit Leerzeichen. Und oft {}muss nicht zitiert werden. ich nicht jede Situation denken kann, zumindest beim Aufruf Fund aus einem Bourne - Shell-Stil, wenn {}, mit nichts drin, selbst als Argument erscheinen würde
Müssen
1
@EliahKagan Ja, es stellt sich heraus, dass findGriffe für sich selbst entkommen, aber es ist keine schlechte Angewohnheit, beim Schreiben von Skripten dabei zu sein. Es tut nicht weh.
Oli
2
@Oli Aber es hilft auch im Prinzip nicht. Wenn Sie findnicht mit dem Entkommen fertig würden , "{}"hätten Sie immer noch den gleichen Effekt wie - {}nur würde keiner funktionieren, anstatt dass beide funktionieren. Dasselbe {}und "{}"dasselbe Verhalten kann und kann nicht an einer Besonderheit von find liegen. Es ist eine schlechte Angewohnheit, zu verwechseln, was durch die Shell erweitert wird, mit dem, was durch ein anderes Programm erweitert wird . Wir alle machen diesen Fehler gelegentlich, aber es ist immer noch ein Fehler - keine bewährte Methode. (Man könnte immer noch zitieren {}, um den Menschen zu zeigen, dass es kein Muster für die Klammererweiterung ist, aber das hat nichts mit der Wortspaltung zu tun.)
Eliah Kagan,