Find
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