16/04/2025

Commandes et Système

Linux : comment rechercher des fichiers selon une date avec find ?

I. Présentation

Dans ce tutoriel, nous allons voir comment trier des fichiers en fonction d’une date à l’aide de la commande find sous Linux.

Find est une commande native aux systèmes UNIX (elle fait partie de la norme POSIX). Il s’agit d’une commande très utile lorsque l’on utilise souvent le terminal, puisqu’elle permet de rechercher des fichiers et des dossiers à travers tout le système en fonction de différents critères.

Cette commande comporte de nombreuses options de filtrage et recherche. Nous allons ici nous concentrer sur la recherche en fonction d’une date, qui peut être la date de dernière modification ou d’accès d’un fichier ou d’un dossier. Ce type de recherches sont notamment utiles lorsque l’on dispose de nombreux fichiers (typiquement, des journaux) ou que l’on cherche à investiguer sur une période définie (avant ou après un évènement).

Version originale de l'article : 18 mars 2013

II. Les attributs avancés des fichiers et dossiers

Sous Linux, tous les fichiers et dossiers possèdent des attributs. Certains sont très connus comme le type (fichier, socket, dossier, lien symbolique, etc.), les permissions (comme rwxrwxr-x), la date de dernière modification, le propriétaire et le groupe propriétaire. Ces attributs sont notamment affichés lorsque l’on utilise l’option -a de la commande ls :

Affichage des attributs “classiques” des fichiers sous Linux via la commande ls.
Affichage des attributs “classiques” des fichiers sous Linux via la commande ls.

Mais, il existe d’autres attributs, généralement moins connus. Parmi ceux-ci, la date de dernier accès ou encore le numéro inode. Ces informations peuvent être listées grâce à la commande stat :

Affichage des attributs avancés des fichiers sous Linux via la commande stat.
Affichage des attributs avancés des fichiers sous Linux via la commande stat.

Maintenant que nous savons que ces attributs modification et accès existent, nous allons voir comment les utiliser dans un filtre via la commande find.

Nous allons voir par la suite que le champ “créé” n’est pas tout à fait fiable, voire inexistant sur certains systèmes de fichier. C’est pourquoi la commande find ne propose pas d’option permettant de filtrer à partir de la date de création.

III. La syntaxe de la commande find

Une recherche classique avec la commande find peut ressembler à celle-ci :

find /home/mickael/ -type f -name *.txt

Cette commande me permet de rechercher tous les fichiers finissant par .txt dans le répertoire /home/mickael. Concernant les options de filtrage temporel, nous avons la possibilité de rechercher les fichiers modifiés ou accédés après un certain nombre de jours, avant un certain nombre de jours et il y a précisément un certain nombre de jours. Cela grâce aux notations suivantes :

  • +N : plus de N jours
  • -N : moins de N jours
  • N : exactement N jours

Cela sera plus compréhensible avec les informations qui suivent. 

A. Rechercher des fichiers en fonction de la date de modification

Nous pouvons également effectuer des recherches en fonction de la date de dernière modification d’un fichier. Cela est très utile notamment pour savoir si une configuration a été modifiée récemment et peut faire partie du contrôle d’intégrité d’un fichier. Nous allons alors utiliser l’option -mtime, par exemple, pour afficher les fichiers modifiés il y a plus de 30 jours (1 mois) :

# Afficher les fichiers .txt créés il y a plus de 30 jours
$ find /home/mickael -type f -name "*.txt"  -mtime +30

À l’inverse, si ce sont les fichiers créés il y a moins d’un mois qui m’intéressent :

# Afficher les fichiers .txt créés il y a plus de 30 jours
$ find /home/mickael -type f -name "*.txt"  -mtime -30

Notez la différence entre +30 et -30. L’option mtime pour "modification time", permet de n'afficher que les fichiers dont la dernière modification est plus ou moins ancienne que le nombre de jours donné.

B. Rechercher des fichiers en fonction de la date d’accès

Nous pouvons aussi utiliser un filtre en fonction de la date de dernier accès d’un fichier à l’aide de l’option -atime

# Afficher les fichiers .txt créés il y a plus de 1 jour
$ find /home/mickael -type f -name "*.txt"  -atime +1

À l’inverse, si ce sont les fichiers créés il y a moins d’un jour qui m’intéressent :

# Afficher les fichiers .txt créés il y a plus de 1 jour
$ find /home/mickael -type f -name "*.txt"  -atime -1

L’option atime pour "access time", permet de n'afficher que les fichiers dont le dernier accès (lecture) est plus ou moins ancien que le nombre de jours donné.

Bien sûr, toutes ces commandes s’appliquent aussi sur des dossiers. Il faut alors remplacer -type f par -type d.

C. Filtrer par minutes plutôt que par heure

Dans mon dernier exemple, nous utilisons la valeur minimale qu’il est possible d’utiliser pour les options atime et mtime, c'est-à-dire 1 jour. Cependant, il peut parfois être utile de vouloir filtrer sur des échelles de temps plus petites, comme la minute.

La commande find contient des options permettant de faire cela, elles sont en réalité les mêmes que vues précédemment, à l’exception qu’il faut remplacer le mot time par min

  • On utilisera amin au lieu de atime pour filtrer par date de dernier accès en minute
  • On utilisera mmin au lieu de mtime pour filtrer par date de dernière modification en minute

Voici quelques exemples : 

# Afficher les fichiers .txt modifiés il y a moins de 30 minutes
find /home/mickael -type f -name "*.txt"  -mmin -30

# Afficher les fichiers .txt accédés il y a plus de 30 minutes
find /home/mickael -type f -name "*.txt"  -amin +30

Les deux seules échelles de temps qui peuvent être utilisées avec find sont donc la minute (mmin, amin) et le jour (mtime, atime), ce qui est généralement suffisant.

Et concernant la date de création ?

La documentation et l’aide de la commande find proposent également les options -ctime et -cmin. On pourrait penser que le “c” est ici pour “création”, mais il n’en est rien. Ces options concernent les changements de statut (ou métadonnées) et non la création du fichier. Pour les systèmes de fichiers courants sous Linux, la date de création n'est pas toujours disponible ou fiable, c’est pourquoi il n’y a pas d’options dans find pour filtrer dessus.

Voici un exemple :

Démonstration de l’option -cmin (ou -ctime) pour la date de changement de statut.
Démonstration de l’option -cmin (ou -ctime) pour la date de changement de statut.

Ici, mon fichier document2.txt a été créé le 2025-03-04 à 21:01:39 comme l’indique la commande stat. Je modifie le contenu de ce fichier le 2025-03-04 à 21:23:03, puis vérifier les attributs avancés à nouveau avec stat. La date de changement a été modifiée, pas la date de création (ce qui est normal). J’utilise ensuite la commande find avec l’option -cmin pour filtrer les fichiers dont le statut a changé il y a plus de trois minutes, et mon document2.txt n’apparait pas.

Si l’option -cmin était valable pour la création (ce qui n’est pas le cas), mon document2.txt aurait dû apparaitre, car il a été créé il y a plus de trois minutes. C’est un piège à connaitre pour utiliser la commande find efficacement.

Plus concrètement, cela permet aussi d’identifier les changements de permissions sur un fichier. Changer les permissions, le propriétaire ou le groupe d’un fichier ne change pas la date de dernière modification ou d’accès, mais la date de changement. Ce qui peut être utile dans plusieurs contextes.

IV. Rechercher en fonction d’une heure précise

Si vous connaissez l’heure et la date précises qui vous intéressent, ou même la fourchette de temps, il est possible de l’utiliser comme filtre de recherche. Si la recherche doit être effectuée à une heure précise, nous pouvons utiliser -newerXt avec une date et une heure. Ici le X peut-être un a (access), un m (modification) ou un c (changement) :

# Afficher les fichiers dont les métadonnées ont été modifiées après la date du 03/03/2025
find ./ -newerct "2025-03-03"

# Afficher les fichiers modifiés avant la date du 03/03/2025 (recherche inverse avec !)
find ./  ! -newermt "2025-03-03"

# Afficher les fichiers accédés après 21h00 le 03/03/2025
find ./  -newerat "2025-03-03 21:00:00"

Les options sont ici très similaires, mais notez bien les subtiles différences qui permettent de différencier le changement de métadonnées, modifications et accès (fin de l’option en at, ct ou mt)

Comme vous le voyez à travers ces exemples, il est aussi possible de faire une recherche inverse, ou d’exclusion (rechercher les fichiers avant une date spécifiée) à l’aide du caractère !. Également, nous pouvons très bien préciser aussi l’heure, la minute et la seconde dans notre filtre pour être beaucoup plus précis.

V. Conclusion

Toutes ces options font de la commande find un outil très puissant. Les connaître et les maitriser permet dans bien des cas d’éviter de faire un script ou d’installer des outils tiers. Les options de filtrage temporel que nous venons de voir peuvent bien sûr être utilisées en combinaison avec les autres options de la commande find, par exemple : 

# Rechercher les fichiers dont le nom fini par ".log", modifiés il y a moins de 7 jours et pesant plus de 1 Mo dans le répertoire /var/log
find /var/log -type f -name "*.log" -mtime -7 -size +1M

Enfin, il est important de garder à l'esprit que les attributs avancés des fichiers peuvent être modifiés manuellement, ce qui signifie qu'ils ne sont pas toujours fiables à 100 %. Cette considération est importante dans le domaine de la cybersécurité, où la manipulation de ces attributs peut être utilisée pour dissimuler des activités malveillantes.

Je vous recommande de vous intéresser aux options avancées de find en plus de ce que nous venons de voir ! N’hésitez pas à partager votre avis sur ce tutoriel dans les commentaires à sur notre serveur Discord.

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 “Linux : comment rechercher 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 la façon dont les données de vos commentaires sont traitées.