J’ai une liste de fichiers dans un répertoire qui sont automatiquement générés par un système avec la date dans le nom de fichier. Quelques exemples sont: audit_20111020
, audit_20111021
, audit_20111022
, etc.
Je veux nettoyer les fichiers datant de plus de 18 mois. Je veux donc mettre en place une commande de recherche unix qui trouvera moins de fichiers que audit_20100501
et les supprimera.
Est-ce que quelqu’un sait utiliser l’ordre lexicographique comme critère dans la commande find?
Une autre variante de Perl:
perl -E'while() { say if /(\d{8})/ && $1 < 20100501}'
Remplacez say
par unlink
si elle imprime les noms de fichiers attendus.
Remarque: <
effectue une comparaison numérique, utilisez lt
si vous souhaitez une comparaison de chaînes.
Avec Perl, c’est facile. Tapez perl
et:
for (glob "*") { my($n) = /(\d+)/; unlink if ($n < 20100501); } ^D
Testez avant d'utiliser. Notez que je suppose que c'est un format fixe et que le répertoire ne contient que ces fichiers
Il est possible de sortinger le résultat de la recherche en utilisant la commande de sort
:
find . -name "audit*" | sort -n
… puis trouvez un moyen de diviser cette liste.
Mais pour ce que vous voulez faire, c’est-à-dire supprimer des répertoires plus anciens qu’une certaine date (18 mois est ~ 547 jours), vous pouvez utiliser le texte ci-dessous à la place:
find -ctime -547 -type d | xargs -I{} rm -rf {}