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 find
diese nicht verarbeiten können. Aber selbst wenn ich sage, +2000
dass es mehr als 3 Jahre sind, bekomme ich das immer noch.
Was fehlt mir hier?
Antworten:
Sie vermissen, dass
find
keine Liste von Dateien als Eingabe benötigt wird. Das Problem ist, dass der Glob/var/log/arc/*
auf zu viele Dateien erweitert wird. Allerdingsfind
wird rekursiv in Unterverzeichnisse standardmäßig, also gibt es keine Notwendigkeit , die glob überhaupt zu benutzen:-delete
ist ein nicht standardmäßiges Prädikat. Wenn Ihrefind
Implementierung dies nicht unterstützt, können Sie Folgendes verwenden:stattdessen.
quelle
find: invalid predicate
ich das: -delete'`-delete
dauert nicht{}
. Siehe Update. Ihre Fehlermeldung scheint jedoch darauf hinzudeuten, dass Ihre Version vonfind
nicht unterstützt wird-delete
. Wenn Sie kein GNU verwendenfind
(was in den meisten Fällen nur unter Linux der Fall ist), müssen Sie-exec -rm {} \;
stattdessen verwenden.-exec rm {} \;
Mache den Trick.-exec
wird von POSIX definiert .