find et locate Linux : chercher des fichiers efficacement
À la fin de ce tutoriel, vous saurez utiliser la commande find linux pour parcourir un arbre (
-name,-type,-mtime,-size,-exec) et locate / plocate pour interroger un index (updatedb) — labs jetables sous/tmp, sans toucher au système réel.Niveau : Débutant · Temps estimé : 40–50 min · Versions testées : Ubuntu 22.04 / 24.04, Debian 12 ; notes Rocky/Alma 9 · Dernière vérification : 2026-09-11
Slug proposé :
linux-find-locate· Série : Linux Basics · Remplace / fusionne : N/A — création (chapitre 10)
Prérequis
- Hub Linux Basics
- Terminal & navigation (
pwd,cd, chemins) et Fichiers & permissions (ls -l, types de fichiers) - Un compte non-root ;
sudoseulement pour installerplocate/ lancerupdatedbsi vous testez locate - Lab entièrement dans
/tmp/lab-find-locate— pas defind /sans filtre
Coût : 0 €. find est déjà là ; plocate (ou mlocate) = paquet optionnel.
Ce que nous allons construire
Arbre lab sous /tmp
→ find : -name / -iname / -type / -maxdepth
→ Filtres : -size, -mtime, combinaisons
→ Actions : -print, -exec, prudence -delete
→ locate / plocate + updatedb (index)
→ Quand find vs locate vs grep/rg
→ Nettoyage
(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « find parcours l’arbre ; locate interroge un index updatedb ».)
Leçon Basics #10 : retrouver un fichier dans un projet. find parcourt le disque ; locate lit un index. Pour le contenu, voir grep et ripgrep.
Étape 1 — Jeu de données lab sous /tmp
mkdir -p /tmp/lab-find-locate/{src,logs,backup,data/"mon dossier"}
printf 'app v1n' > /tmp/lab-find-locate/src/app.py
printf 'app v2n' > /tmp/lab-find-locate/src/App.PY
printf 'noten' > /tmp/lab-find-locate/src/readme.md
printf 'error timeoutn' > /tmp/lab-find-locate/logs/app.log
printf 'accessn' > /tmp/lab-find-locate/logs/nginx.log
printf 'oldn' > /tmp/lab-find-locate/backup/app.py.bak
dd if=/dev/zero of=/tmp/lab-find-locate/data/big.bin bs=1K count=600 status=none
printf 'espacen' > "/tmp/lab-find-locate/data/mon dossier/fichier avec espaces.txt"
# Fichier « ancien » (mtime ~10 jours) pour les labs -mtime
touch -d '10 days ago' /tmp/lab-find-locate/backup/app.py.bak
cd /tmp/lab-find-locate
find . -print | head
Vérifiez l’arbre (src/, logs/, backup/, data/). Restez dans ce répertoire pour la suite.
Étape 2 — find : nom, type et profondeur
find part d’un chemin puis applique des tests (prédicats).
cd /tmp/lab-find-locate
# Tous les chemins sous .
find .
# Nom exact (sensible à la casse)
find . -name 'app.py'
# Insensible à la casse
find . -iname 'app.py'
# Uniquement les fichiers / les dossiers
find . -type f
find . -type d
# Profondeur : ne pas descendre trop loin
find . -maxdepth 1 -type d
find . -mindepth 2 -name '*.log'
| Option | Rôle |
|---|---|
-name 'motif' |
Glob sur le nom (pas le chemin entier) ; utiliser des quotes |
-iname |
Comme -name, casse ignorée |
-type f / -type d |
Fichier régulier / répertoire (l = symlink) |
-maxdepth N |
Limite la descente (1 = niveau courant seulement) |
-mindepth N |
Ignore les niveaux trop hauts |
Astuce : *.py sans quotes est expansé par le shell avant find. Écrivez toujours find . -name '*.py'.
Étape 3 — Taille, date et combinaisons
cd /tmp/lab-find-locate
# Plus gros que 500 Ko (unité c=bytes, k, M, G ; + = plus grand, - = plus petit)
find . -type f -size +500k
# Modifiés il y a plus de 7 jours
find . -type f -mtime +7
# Modifiés dans les dernières 24 h (mtime 0)
find . -type f -mtime -1
# Combiner : fichiers *.py OU *.bak
find . -type f ( -name '*.py' -o -name '*.bak' )
# Négation : fichiers qui ne sont PAS des .log
find . -type f ! -name '*.log'
| Test | Signification |
|---|---|
-size +100M |
Taille > 100 Mo |
-mtime +7 |
Dernière modif il y a plus de 7 jours |
-mmin -30 |
Modifié dans les 30 dernières minutes |
-o / -a / ! |
OU / ET (souvent implicite) / NON — protégez avec ( ) |
Exemple ops borné : find /var/log/monapp -type f -name '*.log' -mtime +14 (jamais find / à la légère).
Étape 4 — Actions : -print, -exec, prudence -delete
Par défaut find affiche les chemins (-print). Pour agir :
cd /tmp/lab-find-locate
# Lister en détail via -exec ({} = chemin ; + = lots, plus efficace que ;)
find . -type f -name '*.log' -exec ls -lh {} +
# Compter les lignes de chaque .py (démo)
find . -type f -name '*.py' -exec wc -l {} +
# Copier les .md vers /tmp/out-md (crée le dossier d’abord)
mkdir -p /tmp/out-md
find . -type f -name '*.md' -exec cp -a {} /tmp/out-md/ ;
ls /tmp/out-md
Espaces dans les noms : ne pipez pas find vers xargs sans -print0 / -0. Préférez -exec … {} + :
cd /tmp/lab-find-locate
find . -type f -name '*espaces*' -exec ls -lh {} +
# Équivalent sûr avec xargs :
find . -type f -print0 | xargs -0 ls -lh
-delete supprime sans corbeille. Réservez-le au lab après un -print à sec :
cd /tmp/lab-find-locate
# À sec d’abord
find ./backup -type f -name '*.bak' -print
# Puis seulement si la liste est correcte :
# find ./backup -type f -name '*.bak' -delete
| Action | Usage |
|---|---|
-print |
Affiche (défaut) |
-exec cmd {} ; |
Une invocation par fichier |
-exec cmd {} + |
Regroupe les chemins (souvent plus rapide) |
-delete |
Supprime — lab uniquement, après dry-run |
En cas de Permission denied, bornez le chemin ; 2>/dev/null seulement en dernier recours.
Étape 5 — locate / plocate : l’index rapide
find parcourt ; locate interroge une base construite par updatedb (souvent via un timer systemd). Sur Ubuntu/Debian récents le paquet s’appelle souvent plocate (commande locate fournie) ; ailleurs mlocate.
# Install (Ubuntu/Debian)
command -v locate || sudo apt install -y plocate
# Rocky/Alma : sudo dnf install -y mlocate # puis updatedb
# Mettre à jour l’index (nécessite sudo ; peut prendre un moment)
sudo updatedb
# Chercher par fragment de nom (très rapide)
locate app.py | head
# Limiter aux hits sous /tmp si votre index l’inclut
locate -i app.py | grep '/tmp/lab-find-locate' || true
| find | locate / plocate | |
|---|---|---|
| Données | Disque live | Index (peut être en retard) |
| Vitesse | Variable (I/O) | En général très rapide |
| Fichier créé il y a 10 s | Visible tout de suite | Invisible tant que updatedb n’a pas tourné |
| Droits | Voit ce que votre user peut traverser | Index système : résultats filtrés selon la config |
Un fichier créé à l’instant est visible avec find tout de suite ; locate attend updatedb. Install : Paquets apt / dnf.
Étape 6 — Choisir l’outil et vérifier
| Besoin | Outil |
|---|---|
Fichier perdu dans un projet, critères riches (-mtime, -size, -exec) |
find |
« Où est nginx.conf ? » sur une machine indexée |
locate |
| Motif dans le contenu (logs, code) | grep / rg — grep et ripgrep |
| Enchaîner find → contenu | find … -exec grep -n motif {} + ou rg avec globs |
cd /tmp/lab-find-locate
# Vérifications attendues
test "$(find . -iname 'app.py' -type f | wc -l)" -ge 1 && echo "find -iname OK"
test "$(find . -type f -size +500k | wc -l)" -ge 1 && echo "find -size OK"
find . -type f -name '*.log' -exec grep -n timeout {} + || true
echo "lab find/locate vérifié"
Nettoyage — lab jetable
rm -rf /tmp/lab-find-locate /tmp/out-md
echo "lab find/locate nettoyé — OK"
Validé si : -name/-iname/-type/-maxdepth, -size/-mtime, -exec (et dry-run avant delete) sont clairs, et vous savez pourquoi locate peut « rater » un fichier tout neuf.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
find: paths must precede expression |
Option avant le chemin | find . -name '*.py' pas find -name … . mal ordonné selon versions — chemin d’abord |
| Aucun résultat alors que le fichier existe | Casse / glob mangé par le shell | -iname ; quotes '*.py' |
Permission denied en masse |
Parcours hors de vos droits | Bornner le chemin ; 2>/dev/null en dernier recours |
| locate ne trouve pas un fichier récent | Index obsolète | sudo updatedb ou utiliser find |
locate: command not found |
Paquet absent | apt install plocate / dnf install mlocate |
xargs casse sur espaces |
Séparateur espace | -print0 + xargs -0, ou -exec |
find / -name … très lent / dangereux |
Racine entière | Toujours un sous-arbre (/var/log, ~/projet, /tmp/lab-…) |
Quiz (3 questions)
1. Que fait find . -type f -name '*.log' ?
– A. Cherche le mot « log » dans le contenu
– B. Liste les fichiers dont le nom matche *.log sous le répertoire courant
– C. Lance updatedb
2. Pourquoi locate peut manquer un fichier créé il y a une minute ?
– A. locate ignore /tmp toujours
– B. L’index n’a pas encore été rafraîchi par updatedb
– C. find est obligatoire pour tout fichier .txt
3. Forme sûre pour traiter des noms avec espaces ?
– A. find … | xargs rm sans option
– B. find … -print0 | xargs -0 … ou find … -exec … {} +
– C. chmod -R 777
Réponses : 1‑B · 2‑B · 3‑B
FAQ
find ou locate au quotidien ?
find pour critères riches (âge, taille, type) ou un projet. locate pour un nom « quelque part » si l’index est frais. Les deux sont complémentaires.
Comment supprimer de vieux logs sans se tromper ?
Dry-run (-print) sur un chemin borné, vérifier, puis -delete / rm -i. En prod, préférez logrotate.
find remplace-t-il grep ?
Non. find trouve des chemins ; grep/rg cherchent du texte. Combo fréquente : find . -name '*.conf' -exec grep -n Listen {} +.
Pour aller plus loin
man find,man locate,man updatedb- Suite menu : Archives tar / gzip
- Contenu dans les fichiers : grep et ripgrep
- Hub : Linux Basics
Maillage série Linux Basics
| ← Précédent | Édition vim / nano |
| → Suivant | Archives tar / gzip |
| Hub | Linux Basics |
Meta publication (à remplir dans Rank Math / SEO)
- Title SEO : find et locate Linux : chercher des fichiers (2026)
- Meta description (≤ 155) : Maîtrisez find et locate (plocate) pour trouver fichiers sous Linux. Lab DevOps safe dans /tmp — guide Basics 2026.
- Focus keyphrase : find linux
- KW secondaires : locate linux, plocate, mlocate, find -name, find -mtime, find -exec, updatedb
- Schemas Rank Math : Article + HowTo (étapes lab) + FAQ (3 questions ci-dessus)
- Image mise en avant :
assets/web/devopelastichayway/cover-linux-find-locate-1200x630.webp(Visuels Linux — WebP 1200×630) - Catégorie : Linux · Niveau : Débutant
- Slug :
linux-find-locate - Statut : HOLD — draft only (ne pas publier)
← Retour parcours Linux — Basics, Admin, Réseau & Sécurité, Shell & Automation.