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

10

Ich habe ein Verzeichnis mit Dateien aus dem Jahr 2010 .. Ich möchte alle Dateien löschen, die älter als 500 Tage sind, und habe Folgendes versucht:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Aber ich verstehe das:

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

Wie ich weiß, bedeutet dies, dass es zu viele Dateien gibt und finddiese nicht verarbeiten können. Aber selbst wenn ich sage, +2000dass es mehr als 3 Jahre sind, bekomme ich das immer noch.

Was fehlt mir hier?

Garg
quelle
1
unix.stackexchange.com/a/239268/116858 (siehe auch Kommentar)
Kusalananda

Antworten:

18

Sie vermissen, dass findkeine Liste von Dateien als Eingabe benötigt wird. Das Problem ist, dass der Glob /var/log/arc/*auf zu viele Dateien erweitert wird. Allerdings findwird rekursiv in Unterverzeichnisse standardmäßig, also gibt es keine Notwendigkeit , die glob überhaupt zu benutzen:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteist ein nicht standardmäßiges Prädikat. Wenn Ihre findImplementierung dies nicht unterstützt, können Sie Folgendes verwenden:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

stattdessen.

terdon
quelle
Danke, aber jetzt habe find: invalid predicate ich das: -delete'`
Garg
1
@Garg zuerst, sorry, ich habe gerade Ihren Befehl kopiert und nicht bemerkt, dass Ihre Syntax falsch ist. Das -deletedauert nicht {}. Siehe Update. Ihre Fehlermeldung scheint jedoch darauf hinzudeuten, dass Ihre Version von findnicht unterstützt wird -delete. Wenn Sie kein GNU verwenden find(was in den meisten Fällen nur unter Linux der Fall ist), müssen Sie -exec -rm {} \;stattdessen verwenden.
Terdon
Danke. -exec rm {} \;Mache den Trick.
Garg
1
@hobbs Ich verstehe nicht warum nicht, -execwird von POSIX definiert .
Terdon
@terdon mein Fehler.
Hobbs