unix trouve des noms de fichiers moins lexicographiquement qu’un nom de fichier donné

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 {}