web-dev-qa-db-fra.com

Comment supprimer tous les fichiers de plus de 3 jours lorsque "Liste des arguments trop longue"?

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

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

Dans un répertoire contenant 37 000 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: la liste d'arguments est trop longue

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

88
Edward Tanguay

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

find . -mtime +3 | xargs rm -Rf

Ou alternativement, plus en ligne avec la commande originale du PO:

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

Peut aussi utiliser:

find . -mindepth 1 -mtime +3 -delete

Pour ne pas supprimer le répertoire cible

59
vangheem

Une autre solution pour la question initiale, esp. utile si vous voulez ne supprimer que CERTAINS des fichiers les plus anciens d'un dossier, ressemblerait à ceci:

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

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

15
62mkv