web-dev-qa-db-fra.com

Supprimer des fichiers de plus de X jours +

J'ai trouvé la commande pour supprimer les fichiers de plus de 5 jours dans un dossier

find /path/to/files* -mtime +5 -exec rm {} \;

Mais comment dois-je procéder également pour les sous-répertoires de ce dossier?

158
Teddy291

Soyez prudent avec les noms de fichiers spéciaux (espaces, guillemets) lorsque vous redirigez vers rm.

Il existe une alternative sûre - l'option - delete:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

Voilà, pas d'appel rm séparé et vous n'avez pas à vous soucier des noms de fichiers.

Remplacer -delete avec -depth -print pour tester cette commande avant de l'exécuter (-delete implique -depth).

266
basic6

Notez que cette commande ne fonctionnera pas lorsqu'elle trouvera trop de fichiers. Cela produira une erreur comme:

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

Cela signifie que la limite de l'appel système exec sur la longueur d'une ligne de commande a été dépassée. Au lieu d'exécuter rm de cette façon, il est beaucoup plus efficace d'utiliser xargs . Voici un exemple qui fonctionne:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

Cela supprimera tous les fichiers (type f) modifiés il y a plus de 14 jours sous/root/Maildir/récursivement à partir de là et plus profondément (mindepth 1). Voir le manuel de recherche pour plus d'options .

18
Julius

C'est le même. Il vous suffit de fournir le répertoire parent plutôt que le préfixe des fichiers. Dans votre exemple, ce serait:

find /path/to -type f -mtime +5 -exec rm {} \;

Cela supprimera tous les fichiers de plus de 5 jours qui sont sous /path/to et ses sous-répertoires.

Pour supprimer des sous-répertoires vides, reportez-vous au commentaire @Costas ci-dessus.

9
apaul

Publier comme réponse car je n'ai pas assez de points pour commenter ...

Il y a une subtilité sur la façon dont find interprète réellement l'argument à -mtime.

find /path/to/files* -mtime +5 -delete

supprimera les fichiers de plus de 5 jours, ce qui signifie 6 jours et plus de 6 jours. Pour supprimer des fichiers réellement "antérieurs à 5 jours", utilisez

find /path/to/files* -mtime 5 -delete

-mtime fonctionne avec les heures en multipliant le nombre donné par 24 et vous pouvez également utiliser des fractions, donc -mtime 0.5 supprimera les fichiers de plus de 12 heures.

Veuillez également voir cette réponse à une question connexe sur find et comment cela fonctionne avec les horodatages.

0
this