Suppression de fichiers par âge

16

Existe-t-il une commande pour supprimer tous les fichiers d'un répertoire qui n'ont pas été modifiés depuis N jours? J'ai besoin de nettoyer d'anciens journaux.

user1024
la source

Réponses:

24

Cela supprimera tous les fichiers de plus de 5 jours, vous pouvez également y mettre un -name '*log'pour être plus précis et vous pouvez également spécifier un maxdepthdans la commande find.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
la source
5
Bien que les administrateurs système sages fassent un essai avec -lsau lieu de -deletes'assurer que cela ne supprimera rien qu'ils voulaient garder. Oui, parlant d'expérience ici.
Shadur
2
Parlant d'expérience, ils vérifient également leur chemin. ou pas, puisque j'ai fait une fois la / some/dir/version. :(
Hennes
3

Avec zshet (.m+n) qualificatifs glob : .sélectionne uniquement les fichiers normaux, m+nsélectionne les fichiers modifiés il y a plus de n jours;
Par exemple, listez les fichiers du répertoire actuel qui ont été modifiés il y a plus de 9 jours:

print -rl -- *(.m+9)

ajouter Dpour inclure des fichiers de points:

print -rl -- *(D.m+9)

ou si vous voulez recurse (et listez par exemple uniquement les fichiers se terminant par .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

remplacez print -rlpar rmsi vous êtes satisfait du résultat; mais vous devrez peut-être utiliser zargssi vous avez beaucoup de fichiers (pour éviter une liste d'arguments trop longue ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
la source