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 :
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 :
# 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 :
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 :
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 :
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 -dn'apparaît plus avec-mtimeni-mmin. Sa date de changement d'état (ctime), elle, a pris l'heure de la manipulation :find . -type f -cmin -1l'a retrouvé. Les tests-ctimeet-cmins'utilisent comme-mtimeet-mmin, et%Cremplace%Tdans-printf. Revers de la médaille : un simplechmodchange aussi lactime, et un déploiement qui recopie tous les fichiers la remet à jour partout. - L'exclusion de
storagecache les fichiers envoyés par les visiteurs. Notre faux script malveillant déposé dansstorage/app/public/uploadsdisparaissait avec la commande précédente. Cherchez à part les fichiers PHP là où il ne devrait pas y en avoir :
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.
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".
find . -type f -mtime -3: fichiers modifiés depuis moins de 3 jours ;-mminà la minute,-newermtdepuis une date.- Exclure
vendor,node_modulesetstorageavec-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.