89 votes

Comment supprimer tous les fichiers plus anciens de 3 jours lorsque "Argument list too long"?

J'ai un répertoire de fichiers journaux qui contient 82000 fichiers et répertoires (environ moitié-moitié).

Je dois supprimer tous les fichiers et répertoires qui sont plus anciens de 3 jours.

Dans un répertoire qui contient 37000 fichiers, j'ai pu le faire avec :

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

Mais avec 82000 fichiers/répertoires, j'obtiens l'erreur :

/usr/bin/find: Liste d'arguments trop longue

Comment puis-je contourner cette erreur pour pouvoir supprimer tous les fichiers/répertoires qui sont plus anciens de 3 jours ?

1 votes

Avez-vous essayé find -mtime +3 -exec rm {} + ?

1 votes

Je crois que l'exécution de find * -mtime +3 |xargs rm résoudrait ce problème.

10 votes

Je pense que le seul problème est find *. find . est mieux. Le globage de la coquille va étendre le * à une immense liste de fichiers et répertoires.

120voto

hd1 Points 11522

Pour supprimer tous les fichiers et répertoires dans le dossier actuel :

find . -mtime +3 | xargs rm -Rf

Ou alors, plus en ligne avec la commande originale de l'OP :

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

26 votes

-1 Le problème est l'étoile dans "find *", vous l'avez résolu en utilisant "find ." à la place. Xargs est trompeur ici.

7 votes

@AleksandrLevchuk il résout le problème de l'OP, et ne mérite donc pas un vote négatif

11 votes

Question: "find * -mtime +3 -exec rm {} \;" gives Argument list too long. Answer: Utilisez "find . -mtime +3 -exec rm {} \;"

59voto

vangheem Points 2072

Peut également utiliser :

find . -mindepth 1 -mtime +3 -delete

Pour ne pas supprimer le répertoire cible

4 votes

Meilleure réponse, beaucoup plus propre que d'appeler rm (et probablement plus sûr). Fonctionne également pour les sous-répertoires.

17voto

62mkv Points 510

Une autre solution pour la question initiale, particulièrement utile si vous voulez supprimer seulement CERTAINS des anciens fichiers dans un dossier, serait quelque chose comme ceci :

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

et ainsi de suite.. Les guillemets bloquent les caractères génériques du shell, vous permettant ainsi de "trouver" des millions de fichiers :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X