Supprimer des fichiers de plus de 500 jours

10

J'ai un répertoire avec des fichiers de l'année 2010 .. Je veux supprimer tous les fichiers de plus de 500 jours et j'ai essayé ceci:

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

Mais je comprends ceci:

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

Comme je le sais, cela signifie qu'il y a trop de fichiers et que je findne peux pas les gérer. Mais même si je mets +20003 ans ou plus, j'obtiens toujours cela.

Qu'est-ce qui me manque ici?

Garg
la source
1
unix.stackexchange.com/a/239268/116858 (voir aussi commentaire)
Kusalananda

Réponses:

18

Vous manquez qui findn'a pas besoin d'une liste de fichiers en entrée. Le problème est que le glob /var/log/arc/*s'étend à trop de fichiers. Cependant, findrécursif dans les sous-répertoires par défaut, il n'est donc pas nécessaire d'utiliser le glob du tout:

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

-deleteest un prédicat non standard. Si votre findimplémentation ne la prend pas en charge, vous pouvez utiliser:

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

au lieu.

terdon
la source
Merci mais j'ai maintenant ceci: find: invalid predicate -delete'`
Garg
1
@Garg d'abord, désolé, je viens de copier votre commande et je n'avais pas remarqué que votre syntaxe était incorrecte. Le -deletene prend pas {}. Voir mise à jour. Cependant, votre message d'erreur semble suggérer que votre version de findne prend pas en charge -delete. Si vous n'utilisez pas GNU find(ce que vous n'utiliserez dans la plupart des cas que si vous utilisez Linux), vous devez utiliser à la -exec -rm {} \;place.
terdon
Je vous remercie. -exec rm {} \;faire l'affaire.
Garg
1
@hobbs Je ne vois pas pourquoi, -execest défini par POSIX .
terdon
@terdon mon erreur.
hobbs