Objectifs
- Trouver des fichiers dans l’arborescence en fonction de leur nom, type ou taille avec
find. - Rechercher une chaîne de caractères à l’intérieur de plusieurs fichiers avec
grep. - Combiner
findet d’autres commandes pour effectuer des actions sur les fichiers trouvés.
find : Trouver des fichiers par leurs propriétés
La commande find est un outil extrêmement puissant pour rechercher des fichiers et des dossiers en se basant sur leurs métadonnées (nom, date, taille, propriétaire, etc.).
Syntaxe de base : find <chemin_de_depart> <expression_de_test> <action>
Tests les plus courants
-name "motif": Cherche par nom. Le motif peut utiliser des jokers (*,?). Il est crucial de mettre le motif entre guillemets.-iname "motif": Comme-name, mais ignore la casse.-type f: Ne trouve que les fichiers.-type d: Ne trouve que les dossiers.-mtime -7: Fichiers modifiés il y a moins de 7 jours. (+7pour plus de 7 jours).-size +10M: Fichiers dont la taille est supérieure à 10 Mégaoctets. (-pour moins,kpour ko,Gpour Go).
Exemples avec find
# Trouver tous les fichiers se terminant par .log dans le dossier courant et ses enfants
find . -name "*.log"
# Trouver tous les dossiers vides dans /tmp
find /tmp -type d -empty
# Trouver tous les fichiers de plus de 100 Mo dans mon dossier personnel
find ~ -type f -size +100M
grep : Trouver du texte à l’intérieur des fichiers
La commande grep est l’outil standard pour chercher une chaîne de caractères à l’intérieur d’un ou plusieurs fichiers.
Syntaxe de base : grep <motif> <fichier(s)>
Options les plus utiles pour la recherche
-r(ou-R) : Récursif. Cherche le motif dans tous les fichiers du dossier spécifié et de ses sous-dossiers.-i: Ignore la casse.-l: Liste. Affiche seulement le nom des fichiers qui contiennent le motif, pas les lignes correspondantes.-v: Inverse. Affiche les lignes qui ne contiennent pas le motif.-c: Compte. Affiche le nombre de lignes correspondantes.
Exemples avec grep
# Chercher "localhost" dans un fichier de configuration
grep "localhost" /etc/hosts
# Chercher "error" (en majuscules ou minuscules) dans tous les fichiers de /var/log
grep -ri "error" /var/log
# Lister les fichiers de mon projet qui contiennent le mot "TODO"
grep -l "TODO" -r .
Combiner find et d’autres commandes
find peut exécuter une commande sur chaque fichier trouvé grâce à l’option -exec.
Syntaxe : find ... -exec <commande> {} \;
{}: Est remplacé par le nom de chaque fichier trouvé.\;: Marque la fin de la commande à exécuter.
# Trouver tous les scripts .sh et leur ajouter la permission d'exécution
find . -name "*.sh" -exec chmod +x {} \;
# Trouver tous les fichiers .tmp de plus de 7 jours et les supprimer
# (à utiliser avec prudence)
find . -name "*.tmp" -mtime +7 -exec rm {} \;
Bonnes pratiques
- Soyez précis. Lancer
find /sur tout le système peut être très long. Si vous savez que le fichier est dans/etcou/home, commencez votre recherche à partir de là. - Citez vos motifs.
find . -name "*.log"garantit que c’estfindqui interprète le*, et non votre shell. grep -rest souvent plus simple. Pour une simple recherche de contenu récursive,grep -r "mon_mot" .est plus rapide à taper quefind . -type f -exec grep "mon_mot" {} \;.
Exercices
-
Chercher des configurations :
- Utilisez
findpour lister tous les fichiers se terminant par.confdans le dossier/etc.
- Utilisez
-
Trouver des fichiers récents :
- Utilisez
findpour trouver tous les fichiers que vous avez modifiés dans votre dossier personnel (~) au cours des dernières 24 heures (-mtime -1).
- Utilisez
-
Chercher une erreur spécifique :
- Utilisez
greppour trouver toutes les occurrences du mot “failed” (insensible à la casse) dans les logs système (/var/log/syslogou un fichier similaire). - Essayez à nouveau en n’affichant que le nombre d’occurrences.
- Utilisez
-
Combiner
findetgrep:- Écrivez une seule commande qui trouve tous les fichiers
.mddans le projetdata.pmet qui affiche ceux contenant le mot “bash”. - Indice :
find ... -exec grep -l "bash" {} +(le+est une version plus efficace de\;).
- Écrivez une seule commande qui trouve tous les fichiers