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?
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
).
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 .
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.
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.