Find

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Recherche de fichiers/répertoires
Commande find
Contexte Recherche par nom, type, date, taille dans une arborescence ; actions sur les résultats via -exec
Voir aussi Grep (filtrer le contenu), Du (taille des résultats)

find parcourt une arborescence de répertoires et sélectionne les fichiers/répertoires qui correspondent à des critères (nom, type, date, taille…), puis peut appliquer une action sur chaque résultat (affichage, suppression, copie, commande arbitraire…).

Rechercher par nom

find /etc -name "*.conf"    # sensible à la casse
find /etc -iname "*.conf"   # insensible à la casse
find . -type f -name "* *"  # fichiers dont le nom contient un espace

Renommer les espaces des noms de fichiers par des "_" :

find . -type f -name "* *" -exec bash -c 'mv "$1" "${1// /_}"' _ {} \;

Rechercher par type

find . -type f   # fichiers réguliers
find . -type d   # répertoires
find . -type l   # liens symboliques

Rechercher par date de modification

find /var/log -mtime +30                      # modifiés il y a plus de 30 jours
find /var/log -mtime -1                       # modifiés il y a moins de 1 jour
find /tmp -iname 'msg_*' -type f -mmin +5 -ls # plus vieux que 5 minutes, détail façon "ls -l"

-mtime compte en jours, -mmin en minutes. +N = plus vieux que N, -N = plus récent que N.

Rechercher par taille

find / -size +100M   # plus gros que 100 Mo
find / -size -1k     # plus petit que 1 Ko

Limiter la profondeur

find . -maxdepth 1                     # ne pas descendre dans les sous-répertoires
find . -path ./cache -prune -o -print  # exclure un répertoire précis de la recherche

Rester sur le système de fichiers de départ

find / -xdev -name "*.log"   # ne pas traverser les autres points de montage (NFS, etc.)

-mount est un alias historique de -xdev, toujours accepté mais à préférer sous sa forme -xdev.

Personnaliser l'affichage

find . -printf "%p %s\n"   # format libre : ici chemin puis taille en octets
find . -ls                  # détail façon "ls -l" pour chaque résultat

Exécuter une action sur les résultats (-exec)

find /path -type f -exec scp {} root@hostname:{} \;   # copier chaque fichier trouvé vers un hôte distant, en conservant le chemin
find . -type f -name "*.tmp" -exec rm {} \;            # -exec ... \; : une commande lancée par fichier trouvé
find . -type f -name "*.tmp" -exec rm {} +             # -exec ... + : les résultats sont groupés en un minimum d'appels (plus rapide)

⚠️ -exec rm et -delete suppriment sans confirmation. Toujours valider la sélection avec -print (ou sans option, l'affichage par défaut) avant d'ajouter l'action destructrice, pour vérifier que la commande cible exactement les fichiers voulus :

find /tmp -iname 'msg_*' -mtime +7           # 1. on vérifie d'abord ce qui serait supprimé
find /tmp -iname 'msg_*' -mtime +7 -delete   # 2. seulement ensuite on ajoute -delete

Voir aussi

  • Grep — filtrer le contenu des fichiers trouvés
  • Du — taille disque des résultats d'une recherche