it-swarm.com.de

Löschen Sie Dateien, die älter als X Tage + sind

Ich habe den Befehl zum Löschen von Dateien gefunden, die älter als 5 Tage in einem Ordner sind

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

Aber wie mache ich das auch für Unterverzeichnisse in diesem Ordner?

158
Teddy291

Seien Sie vorsichtig mit speziellen Dateinamen (Leerzeichen, Anführungszeichen), wenn Sie an rm weiterleiten.

Es gibt eine sichere Alternative - die Option - delete:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

Das war's, kein separater rm-Aufruf und Sie müssen sich keine Gedanken über Dateinamen machen.

Ersetzen Sie -delete mit -depth -print, um diesen Befehl zu testen, bevor Sie ihn ausführen (-delete impliziert -depth).

266
basic6

Beachten Sie, dass dieser Befehl nicht funktioniert, wenn zu viele Dateien gefunden werden. Es wird ein Fehler wie folgt ausgegeben:

bash: /usr/bin/find: Argument list too long

Dies bedeutet, dass das Limit des Exec-Systemaufrufs für die Länge einer Befehlszeile überschritten wurde. Anstatt rm auf diese Weise auszuführen, ist es viel effizienter, xargs zu verwenden. Hier ist ein Beispiel, das funktioniert:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

Dadurch werden alle Dateien (Typ f) entfernt, die länger als 14 Tage unter/root/Maildir/rekursiv von dort und tiefer (mindepth 1) geändert wurden. Weitere Optionen finden Sie im Suchhandbuch .

18
Julius

Es ist das gleiche. Sie müssen nur das übergeordnete Verzeichnis und nicht das Präfix der Dateien angeben. In Ihrem Beispiel wäre es:

find /path/to -type f -mtime +5 -exec rm {} \;

Dadurch werden alle Dateien gelöscht, die älter als 5 Tage sind und sich unter /path/to Und seinen Unterverzeichnissen befinden.

Informationen zum Löschen leerer Unterverzeichnisse finden Sie oben im Kommentar von @Costas.

9
apaul

Als Antwort posten, weil ich nicht genug Punkte habe, um zu kommentieren ...

Es gibt eine Feinheit darüber, wie find das Argument tatsächlich zu -mtime.

find /path/to/files* -mtime +5 -delete

löscht Dateien, die älter als 5 Tage sind, dh 6 Tage alt und älter als 6 Tage. Um Dateien zu löschen, die tatsächlich "älter als 5 Tage" sind, verwenden Sie

find /path/to/files* -mtime 5 -delete

-mtime arbeitet mit Stunden, indem die angegebene Zahl mit 24 multipliziert wird, und Sie können auch Brüche verwenden, also -mtime 0.5 löscht Dateien, die älter als 12 Stunden sind.

Siehe auch diese Antwort zu einer verwandten Frage zu find und wie es mit Zeitstempeln funktioniert.

0
this