Aller au contenu principal
Making DigitalMaking Digital
Note technique

Trouver les derniers fichiers modifiés sur un serveur avec find

En bref

find . -type f -mtime -3 liste les fichiers modifiés depuis moins de 3 jours ; -mmin travaille à la minute et -newermt depuis une date précise. -prune écarte vendor, node_modules et storage, et -printf suivi de sort -r trie par date. Pour un site piraté, la date de modification peut être falsifiée : regardez aussi la ctime (-cmin, -ctime) et les fichiers PHP dans les dossiers d'envoi.

Un site se comporte bizarrement depuis hier, ou vous voulez savoir ce qu'un déploiement a réellement changé sur le serveur. La commande find liste les fichiers modifiés depuis un nombre de jours, de minutes ou une date précise, et peut écarter vendor, node_modules et storage pour ne garder que votre code. Une précaution pour un site piraté : la date de modification se falsifie, la date de changement d'état (ctime) non. Toutes les commandes ci-dessous ont été lancées dans un conteneur Linux de test.

Quelle commande pour les fichiers modifiés ces derniers jours ?

Depuis la racine du site :

Terminal
find . -type f -mtime -3

-type f limite aux fichiers, -mtime -3 garde ceux modifiés il y a moins de 3 jours. Le manuel de GNU find précise le calcul : le nombre de périodes de 24 heures "is always rounded down; therefore 0 means "less than 24 hours ago", 1 means "between 24 and 48 hours ago"". Dans notre test, -mtime 0 et -mtime -1 ont donc renvoyé les mêmes fichiers.

À la minute près, ou depuis une date précise ?

Trois variantes, selon la question posée :

Terminal
# Modifiés depuis moins de 60 minutes
find . -type f -mmin -60

# Modifiés après une date et une heure données
find . -type f -newermt "2026-10-18 00:00"

# Modifiés aujourd'hui, depuis minuit
find . -daystart -type f -mtime 0

-newermt compare la date de modification à une date écrite en clair, pratique pour "tout ce qui a bougé depuis la mise en ligne de lundi". -daystart fait partir le calcul du début de la journée au lieu de "il y a 24 heures" ; il doit être placé avant -mtime.

Comment ignorer vendor, node_modules et storage ?

Sur une application Laravel, les dépendances et les logs changent sans cesse et noient le résultat. Notre test listait sept fichiers récents, dont un log, un fichier envoyé et deux fichiers de dépendances ; avec l'exclusion, il n'en restait que trois, ceux du code :

Terminal
find . \( -path ./vendor -o -path ./node_modules -o -path ./storage \) -prune -o -type f -mtime -3 -print

-prune empêche find de descendre dans ces dossiers. Le -print final est indispensable : sans lui, les noms des dossiers écartés s'affichent aussi.

Comment trier les résultats par date ?

-printf affiche la date devant chaque chemin, et sort -r met les plus récents en tête :

Terminal
find . \( -path ./vendor -o -path ./node_modules -o -path ./storage \) -prune -o -type f -mtime -3 -printf '%TY-%Tm-%Td %TH:%TM  %p\n' | sort -r

Résultat dans notre test :

Terminal
2026-10-19 13:56  ./public/js/app.js
2026-10-19 13:26  ./app/Http/Kernel.php
2026-10-17 13:56  ./config/app.php

Autre possibilité, stat affiche la date avec les secondes et le fuseau : remplacez -printf ... par -exec stat -c '%y %n' {} +, toujours suivi de | sort -r.

Un fichier modifié peut-il passer inaperçu ?

Oui, de deux façons, et c'est le point à connaître pour vérifier un site piraté.

  • La date de modification se change. Un fichier modifié puis daté du 1er septembre avec touch -d n'apparaît plus avec -mtime ni -mmin. Sa date de changement d'état (ctime), elle, a pris l'heure de la manipulation : find . -type f -cmin -1 l'a retrouvé. Les tests -ctime et -cmin s'utilisent comme -mtime et -mmin, et %C remplace %T dans -printf. Revers de la médaille : un simple chmod change aussi la ctime, et un déploiement qui recopie tous les fichiers la remet à jour partout.
  • L'exclusion de storage cache les fichiers envoyés par les visiteurs. Notre faux script malveillant déposé dans storage/app/public/uploads disparaissait avec la commande précédente. Cherchez à part les fichiers PHP là où il ne devrait pas y en avoir :
Terminal
find storage/app/public public -name "*.php" ! -path public/index.php

Sur une application Laravel, le seul fichier PHP attendu dans public est index.php.

Après un déploiement

Lancez la commande avec -newermt et l'heure du déploiement : tout fichier modifié après, hors storage, a été changé en dehors de votre procédure. Si l'application est versionnée avec Git, ce fichier mérite d'être comparé au dépôt.

Ces vérifications font partie de la surveillance que nous assurons sur les applications que nous hébergeons et maintenons. Et si des droits de fichiers ont été modifiés en chemin, voir l'erreur "No input file specified".

À retenir
  • find . -type f -mtime -3 : fichiers modifiés depuis moins de 3 jours ; -mmin à la minute, -newermt depuis une date.
  • Exclure vendor, node_modules et storage avec -prune, sans oublier -print.
  • Trier avec -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort -r.
  • Site piraté : regarder aussi la ctime (-cmin, -ctime) et les fichiers PHP dans les dossiers d'envoi.

Testé avec GNU findutils 4.10.0 sous Linux (Debian, Docker).

Questions fréquentes

Comment lister les fichiers modifiés hier seulement ?

Avec find . -daystart -type f -mtime 1, sur le modèle de l'exemple du manuel de GNU find. -daystart fait partir le calcul de minuit au lieu des dernières 24 heures.

Quelle différence entre -mtime 1, -mtime -1 et -mtime +1 ?

-mtime 1 désigne les fichiers modifiés il y a entre 24 et 48 heures, -mtime -1 ceux de moins de 24 heures, -mtime +1 ceux de plus de 48 heures. Le nombre de périodes de 24 heures est arrondi à l'entier inférieur.

Comment compter les fichiers modifiés au lieu de les afficher ?

Ajoutez | wc -l à la fin de la commande find : le résultat est le nombre de lignes, donc de fichiers trouvés.

Making Digital

Nous connectons les logiciels des PME, automatisons leurs tâches répétitives et créons des assistants IA, depuis 2010. Nos articles partent de nos projets réels.

Notre parcours
Une question sur ce sujet ?

Parlons-en 30 minutes.

Vous saurez si votre problème se règle, comment, et en combien de temps. Sans engagement.

Un échange de 30 minutes, en visio ou par téléphone

Gratuit, sans engagement. On parle de votre problème, pas de technique.