Exemples utilisation find linux

La commande find est l’une des instructions que j’ai le plus utilisées lorsque j’ai commencé à Administrer des serveurs dédiés.

  • Où est le fichier de configuration de Apache sur une distribution Gentoo ?
  • Où est le fichier de gestion des DNS sous Debian avec un Plesk ??

Sur le net, on trouve des éléments de réponse mais c’est toujours proche mais pas toujours exact !

Voici donc un petit bloc note sur la commande find : comment l’utiliser et surtout pleins d’exemple à copier-coller dans Putty.

Version de find

Cet article a été réalisé avec «find» de GNU version 4.1.20

Structure de la commande find

find Chemin Critère Option

Structure de la commande find

La commande find dispose de trois parties :

#Partie de cmd findPrésentation
1 CheminChemin du dossier où la recherche doit être effectuée.
Le chemin peut être absolu ou relatif.
Si le chemin est absent de la commande, la recherche se fait à partir du dossier en cours et ses sous-dossiers
2 Critèreliste des critères à donner à find pour orienter la recherche.
Il y en a plein, ils peuvent s’additionner et se combiner comme vous aller le voir dans la suite de l’article.
Il est enfin possible d’utiliser des wildcards pour augmenter la capacité de recherche.
3OptionCette dernière partie est facultative mais très puissante. Quatre options sont possibles : -print : par défaut, signifie affiche le résultat dans le shell
-printf : permet de formater le résultat retourné par la commande
-exec : exécuter une commande sur liste retournée par find, la suite de l’article présente des manières d’utiliser cette option très intéressante
-ok : comme -exec mais demande une confirmation pour chaque élément de la liste trouvé

10 Principaux critères de la commande find :

 #CritèreSignification
1-nameRecherche par nom de fichier, mettre le nom entre quote simple ou double quote.
2-inameidentique à -name mais sans différencier les majuscules et les minuscules.
3-typeRecherche par type de fichier, d pour directory, f pour file et l pour link.
4-userRecherche par propriétaire.
5-groupRecherche par appartenance à un groupe.
6-sizeRecherche par taille de fichier. pattern attendu : [-|+]n[cwbkMG]
7-daystartRecherche par sur une période : -amin, -atime, -cmin, -ctime (Recherche par date de création), -mmin, and -mtime (Recherche par date de dernière modification). utilisation de + et – pour rechercher au delà ou moins que le chiffre mentionné
8-maxdepth / -mindepthprofondeur maximum / minimum de recherche dans les dossiers
9-permRecherche par autorisations d’accès. utilisation de + et – pour rechercher au delà ou moins que le chiffre mentionné
10-linksRecherche par nombre de liens au fichier.

Rechercher et afficher le plus d’informations :

find dir/ -name "*sh" -exec ls -al {} \;

si jamais find trouve un dossier se terminant par sh, la commande va afficher le contenu du dossier en + des fichiers qui vérifient la condition 😯

Rechercher et changer le chmod :

pour les dossiers :

find dir/ -type d -exec chmod 755 {} \;

pour les fichiers :

find dir/ -type f -exec chmod 644 {} \;

pour wordpress :

find dir/ -type d -exec chmod 750 {} \; 
find dir/ -type f -exec chmod 640 {} \; 
find dir/ -type f -name 'wp-config.php' -exec chmod 600 {} \; 
find dir/ -type f -name '.htaccess' -exec chmod 644 {} \; 
find dir/ -perm 777 # permet de vérifier qu'il n'y a pas de dossiers ou de fichiers en 777

Recherche de dossiers et fichiers vides

Dossier :

CommandeEquivalent
 find dir/ -type d -emptyfind dir/ -type d -size 0

Fichier :

CommandeEquivalent
find dir/ -type f -emptyfind dir/ -type f -size 0

Recherche par permission

Fichier :

CommandeEquivalent
find dir/ -perm 755 -printfind dir/ -perm -020 -print

Rechercher de texte dans tous les fichiers :

CommandeEquivalentEquivalent
 find dir/ -type f -exec grep -H ‘string’ {} \;grep -R ‘string’ dir/ find dir/ -name ‘*’ | xargs grep ‘string’

Rechercher dans tous les fichiers php le mot maur quelquesoit sa casse :

find . -name *.php -type f -exec grep -Hni --color=auto 'maur' {} \;

Rechercher et Supprimer :

Supprimer récursivement tous les fichiers .php dans un dossier particulier :

find dir/ -name "*.php" -exec rm -rf "{}" \;

Supprimer récursivement tous les fichiers « WILDCARDNAME » créé il y a plus de 3 jours dans un dossier particulier :

find dir/ -name "WILDCARDNAME" -type f -mtime +3 -ok rm {} \;

Rechercher et dézipper en masse :

find dir/ -name "*.odt" -exec sh -c 'unzip -c "{}" content.xml | grep -qi "saint valentin"' ";" -print

Recherche sur une période :

Rechercher tous les fichiers modifiés depuis 20 jours :

find dir/ -mtime -20 -type f

Rechercher tous fichiers modifiés entre 1 et 5 minutes :

find dir/ -mmin +0 -mmin -5

Rechercher tous fichiers modifiés il y a moins de 24 heures :

find dir/ -mtime 0

Rechercher tous fichiers modifiés il y a plus de 24 heures :

find dir/ -mtime +0

Rechercher tous fichiers modifiés entre 24 heures et 48 heures :

find dir/ -mtime 1

Recherche avec caractère d’association

Pour associer plusieurs critères avec -a pour et, -o pour ou, ! pour négation.

Affiche tous les fichiers n’appartenant pas à root :

find dir/ ! -user root -print

Affiche tous les fichiers se terminant par .jpg ou .png :

find dir/ \( -name '.jpg' -o -name '.png' \)

rechercher le mot maur quelquesoit sa casse dans tous les fichiers sauf les fichiers ayant l’extension .pdf, .jpg, .png, .gif, .jpeg

find . -type f \( -iname "*" ! -iname "*.pdf" ! -iname "*.jpg" ! -iname "*.png" ! -iname "*.gif"  ! -iname "*.jpeg" \) -exec grep -Hni --color=auto 'maur' {} \;

Wildcards – quote et double quote :

Dans tous les articles que j’ai lu, il est mentionné que l’utilisation des doubles quotes permet au Wildcard au shell de les interpréter. Par contre, si l’on utilise les quotes simples, là le shell ne fait pas la correspondance .

Mais dans les faits, je constate que ces deux commandes donnent le même résultat :

Avec quote doubleAvec quote simple
find -name « [a-b]* » -type f -exec ls -tl {} \;find -name ‘[a-b]*’ -type f -exec ls -tl {} \;

Ai je mal compris ?

Ce n’est que le début …

Pour finir cet article, je viens de parcourir le man de la commande find et comme le montre la documentation, find dispose d’autres actions et d’autres critères qui permettent de réaliser des recherches très fines.

Cet article n’est donc qu’un aperçu pratique des commandes que j’utilise au quotidien. Des milliers d’autres combinaisons sont possibles

La page suivante vous donne un équivalent du man en version web.

Aller plus loin :

Un deuxième article vient d’être réalisé sur le sujet pour réaliser des opérations plus complexes grâce à find

Cet article a été publié sous la catégorie tutos. Enregistrer cet article permalink.