19/12/2024

BashCommandes et Système

Trier des fichiers selon une date avec FIND

I. Présentation

Dans ce tutoriel, nous allons apprendre à tirer et à agir sur des fichiers et des dossiers selon une date. Cela pourra être leur date de création, de modification ou de dernier accès. Nous pourrons effectuer plusieurs actions sur ces données une fois que nous saurons les trier.

II. Les options FIND

Pour ce faire, nous allons nous aider de la commande "find" qui sert à lister et trier des fichiers selon certaines options. Nous pouvons en effet avec FIND définir le nom ou une partie du nom de ce que nous cherchons ( option "-name < >"), définir sur combien de niveau (arborescence) on souhaite chercher ( option "-maxdepth < >"), depuis où, etc ...
Par exemple si nous souhaitons chercher toutes les archives faites dans le dossier "/var/log" qui sont plus âgées que 5 jours :

find /var/log/ -maxdepth 3 -name "*gz*" -ctime +5

Explication :

  • "/var/log" : indique le répertoire ou nous allons chercher. Nous aurions aussi pu indiquer "." pour spécifier le répertoire où nous nous trouvons.
  • "name "*tar*"" : Permet de nous afficher tous les fichiers qui possèdent "tar" dans leur nom. On s'aide des "*" qui nous permettent de dire "tout à partir du moment ou il y a tar".
  • "maxdepth 3" : permet d'indiquer que nous allons descendre dans les arborescences sur trois niveaux. Le trois à été choisi car on descend rarement plus de 3 niveaux dans les logs mais cela peut être plus où peut ne pas être indiqué pour descendre au maximum.
  • "ctime +5" : c'est l'option la plus intéressante, avec celle-ci nous n'affichons que les données dont la création est plus vieille que 5 jours.

Avec cette dernière option, nous pouvons trier les fichiers selon la date, mais il existe d'autres options :

  • "ctime" pour "creation time" : permet de n'afficher que les fichiers dont la création est plus ou moins vieille que le nombre de jour donné.
  • "atime" pour "access time" : permet de n'afficher que les fichiers dont le dernier accès est plus ou moins vieux que le nombre de jour donné
  • "mtime" pour "modification time": permet de n'afficher que les fichiers dont la dernière modification est plus ou moins vieille que le nombre de jour donné

Sur ces trois options, nous pouvons spécifier un nombre de jours précédé d'un "+" pour "plus vieux que X jours" ou un "-" pour spécifier "moins vieux que".

Quelques exemples :

Pour lister les fichiers qui ont été modifiés il y a moins de trois jours :

find -mtime -3

Pour lister les fichiers qui ont été ouverts (lus) il y a plus de 20 jours :

find -atime +20

On peut bien entendu combiner l'une des trois options avec les autres options vues un peu plus tôt dans le tutoriel.

III. Supprimer les fichiers

Maintenant que nous savons lister les fichiers, nous voulons agir sur les fichiers que nous avons trouvés avec la même ligne de commande. On peut pour cela ajouter "-exec ". Par exemple si nous souhaitons supprimer les archives qui date de plus de 30 jours dans le dossier "/var/log"

find /var/log/ -maxdepth 3 -name "*gz*" -ctime +30 -exec rm -f {} \;
  • "{}" permet d'afficher le nom du fichier trouvé à la place de ces deux accolades.
  • "\;" : permet de terminer la commande proprement

Nous sommes libre d'effectuer la commande que l'on souhaite après le "-exec".

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

3 commentaires sur “Trier des fichiers selon une date avec FIND

  • Il s’agit de filtrer/sélectionner plutôt que de trier. 😉

    Par ailleurs, l’option -delete est probablement préférable à -exec. 😉

    Répondre
  • Merci pour ce tuto mais comme beaucoup de tuto personne n’explique comment chercher un fichiier crée entre deux dates… dommage
    exemple comment touver un fichier crée ou modifié entre février 2013 et avril 2013 ? Je cherche partout et personne ne l’explique, peut être que c’est compliqué?

    Répondre
  • find . -type f -newermt 20130201 ! -newermt 20130401

    ça te donnera la liste des fichiers modifiés entre le 1er février 2013 (inclus) et le 1er avril 2013 (exclu).

    si tu veux travailler avec les date de création, il faudra utiliser -newerct à la place de -newermt.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.