Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

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 ; sudo seulement pour installer plocate / lancer updatedb si vous testez locate
  • Lab entièrement dans /tmp/lab-find-locatepas de find / 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 / rggrep 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

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.