Wie lösche ich alle Dateien, die älter als 3 Tage sind, wenn die Argumentliste zu lang ist?


89

Ich habe ein Protokolldateiverzeichnis mit 82000 Dateien und Verzeichnissen (ungefähr die Hälfte und die Hälfte).

Ich muss alle Dateien und Verzeichnisse löschen, die älter als 3 Tage sind.

In einem Verzeichnis mit 37000 Dateien konnte ich dies tun mit:

find * -mtime +3 -exec rm {} \;

Aber mit 82000 Dateien / Verzeichnissen erhalte ich den Fehler:

/ usr / bin / find: Argumentliste zu lang

Wie kann ich diesen Fehler umgehen, damit ich alle Dateien / Verzeichnisse löschen kann, die älter als 3 Tage sind?


1
Hast du es versucht find -mtime +3 -exec rm {} +?
Gilles Quenot

1
Ich glaube, Laufen find * -mtime +3 |xargs rmwürde dieses Problem lösen.
Mats Petersson

9
Ich denke das einzige Problem ist find *. find .ist besser. Das Shell-Globing erweitert das *auf eine riesige Liste von Dateien und Verzeichnissen.
Kunstloser Lärm

@artlessnoise ist genau richtig.
Sjas

Antworten:


120

So löschen Sie alle Dateien und Verzeichnisse im aktuellen Verzeichnis:

find . -mtime +3 | xargs rm -Rf

Oder alternativ mehr im Einklang mit dem ursprünglichen Befehl des OP:

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 Das Problem ist der Stern in "find *". Sie haben es mit "find" gelöst. stattdessen. Xargs ist hier irreführend.
Aleksandr Levchuk

7
@AleksandrLevchuk es löst OPs Problem, und deshalb keinen downvote verdient
HD1

11
Frage: "find * -mtime +3 -exec rm {} \;" gibt die Argumentliste zu lang. Antwort: Verwenden Sie "find. -Mtime +3 -exec rm {} \;"
Aleksandr Levchuk

2
Vielleicht möchten Sie --nach rm hinzufügen , wiefind . -mtime +3 -exec rm -- {} \;
Domen

8
Niemand hat gesagt, wofür das --ist.
Acumenus

59

Kann auch verwenden:

find . -mindepth 1 -mtime +3 -delete

Zielverzeichnis nicht löschen


4
Beste Antwort, viel sauberer als rm anzurufen (und wahrscheinlich sicherer). Funktioniert auch für Unterverzeichnisse.
basic6

15

Eine andere Lösung für die ursprüngliche Frage, insb. nützlich, wenn Sie nur einige der älteren Dateien in einem Ordner entfernen möchten, wäre Folgendes:

find . -name "*.sess" -mtime +100 

und so weiter .. Zitate blockieren Shell-Platzhalter, sodass Sie Millionen von Dateien "finden" können :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.