Comment supprimer tous les fichiers de plus de 3 jours lorsque «Liste d'arguments trop longue»?


89

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

J'ai besoin de supprimer tous les fichiers et répertoires de plus de 3 jours.

Dans un répertoire contenant 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 contourner cette erreur afin de pouvoir supprimer tous les fichiers / répertoires de plus de 3 jours?


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

1
Je pense que courir find * -mtime +3 |xargs rmrésoudrait ce problème.
Mats Petersson

9
Je pense que le seul problème est find *. find .est mieux. Le shell globing avec étend le *à une énorme liste de fichiers et répertoires.
bruit sans art le

@artlessnoise est parfait.
sjas

Réponses:


120

Pour supprimer tous les fichiers et répertoires du répertoire actuel :

find . -mtime +3 | xargs rm -Rf

Ou bien, plus conforme à la commande d'origine de l'OP:

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

26
-1 Le problème est l'étoile dans "find *", vous l'avez résolu en utilisant "find". au lieu. Xargs est ici trompeur.
Aleksandr Levchuk

7
@AleksandrLevchuk il résout le problème des OP, et ne mérite donc pas un
hd1

11
Question: "find * -mtime +3 -exec rm {} \;" donne une liste d'arguments trop longue. Réponse: Utilisez "find. -Mtime +3 -exec rm {} \;"
Aleksandr Levchuk

2
Vous voudrez peut-être ajouter --après rm, commefind . -mtime +3 -exec rm -- {} \;
domen

8
Personne n'a dit à quoi ça --sert.
Acumenus

59

Peut également utiliser:

find . -mindepth 1 -mtime +3 -delete

Pour ne pas supprimer le répertoire cible


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

16

Une autre solution pour la question originale, esp. utile si vous souhaitez supprimer uniquement CERTAINS des fichiers les plus anciens d'un dossier, ce serait comme ceci:

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.