GNU/Linux >> Tutoriels Linux >  >> Linux

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires

Grep est un excellent outil lorsque vous devez effectuer une recherche sur le contenu d'un fichier.

Habituellement, vous exécutez grep sur un seul fichier comme ceci :

grep search_term filename

Grep est assez polyvalent. Si vous voulez rechercher tous les fichiers dans un répertoire avec grep , utilisez-le comme ceci :

grep search_term *

Il y a un problème avec ça. Il recherche uniquement dans tous les fichiers du répertoire courant. Il ne cherchera pas dans les sous-répertoires.

Vous pouvez faire une recherche grep dans tous les fichiers et tous les sous-répertoires du répertoire courant en utilisant le -r option de recherche récursive :

grep -r search_term . 

Vous pouvez également spécifier le chemin du répertoire si vous n'êtes pas dans le répertoire où vous souhaitez effectuer la recherche :

grep -r search_term directory_path

C'était un bref récapitulatif. Laissez-moi vous montrer tout cela en détail avec des exemples appropriés afin qu'il soit plus facile pour vous de comprendre.

Recherche Grep dans tous les fichiers d'un répertoire

Voici la structure de répertoire que je vais utiliser dans cet exemple. Sauf empty.txt, tous les fichiers contiennent le terme 'simple' sur lequel je vais effectuer la recherche grep.

[email protected]:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

Pour rechercher le mot 'simple' dans tous les fichiers des répertoires en cours, il suffit d'utiliser le joker (*). Le caractère générique remplace en fait le nom de tous les fichiers et répertoires du répertoire actuel.

grep simple *

Cela recherchera dans tous les fichiers des répertoires actuels, mais n'entrera pas dans les sous-répertoires. Étant donné que vous ne pouvez pas rechercher directement grep sur un répertoire, l'erreur "XYZ est un répertoire" s'affichera avec les résultats de la recherche.

Si vous n'êtes pas dans le même répertoire où vous voulez jouer, vous pouvez spécifier le chemin du répertoire et le terminer par /*

grep search_term directory_path/*

Fondamentalement, vous utilisez le caractère générique pour développer tous les éléments (fichiers et répertoires) du répertoire donné.

Maintenant que vous savez cela, voyons comment vous pouvez effectuer une recherche récursive avec grep afin qu'il examine également les fichiers des sous-répertoires.

Grep recherche récursive dans tous les sous-répertoires d'un répertoire

Grep fournit un -r option pour la recherche récursive. Avec cette option, grep examinera tous les fichiers du répertoire courant (ou spécifié) et il examinera également tous les fichiers de tous les sous-répertoires.

Voici la recherche récursive que j'ai effectuée dans l'exemple précédent pour effectuer une recherche grep dans le dossier courant :

grep -r simple .

Voici le résultat :

Il y a aussi un -R option pour la recherche récursive et cela fonctionne presque de la même manière que le -r option.

grep -R simple .

Alors, quelle est la différence grep -r et grep -R ? Un seul, en fait. Le -R est une recherche déréférencée, ce qui signifie qu'elle suivra les liens symboliques pour accéder au fichier d'origine (qui peut se trouver dans une autre partie du système).

Jetez un oeil à la sortie du -R rechercher dans le même exemple :

Avez-vous remarqué qu'il donne un résultat de recherche supplémentaire avec le linked.txt qui est essentiellement un lien symbolique et a été omis de la recherche grep avec -r option ?

Si vous n'êtes pas dans le répertoire où vous souhaitez effectuer la recherche récursive, fournissez simplement le chemin absolu ou relatif du répertoire à la commande grep :

grep -r search_term path_to_directory

Tout semble bon mais que se passe-t-il si vous souhaitez exclure un certain répertoire de la recherche récursive ? Il y a une disposition pour cela aussi. Je vous l'ai dit, grep est une commande extrêmement polyvalente.

grep -r --exclude-dir=dir_name serach_term directory_path

Ce n'est pas ça. Vous pouvez exclure plusieurs sous-répertoires de la recherche récursive de la manière suivante :

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

Voici à quoi ressemble l'exclusion des répertoires dans notre exemple :

Et oui, comme le montre l'exemple ci-dessus, l'exclusion fonctionne à la fois avec -r et -R options récursives.

Résumer

Voici un bref résumé de l'utilisation de la recherche grep pour plusieurs fichiers et répertoires :

Commande Grep Description
chaîne grep * Recherche dans tous les fichiers du répertoire courant
répertoire de chaîne grep Recherche dans tous les fichiers du répertoire dir
grep -r chaîne . Recherche récursive dans tous les fichiers de tous les sous-répertoires
grep -r répertoire de chaîne Recherche récursive dans tous les fichiers de tous les sous-répertoires de dir
grep -R chaîne . Identique à r mais suit les liens symboliques

J'espère que vous aimez cette astuce grep rapide. Si vous en voulez plus, vous pouvez lire ce tutoriel détaillé sur l'utilisation de la commande grep :

Faites-moi savoir si vous avez des questions ou des suggestions sur ce sujet.


Linux
  1. Comment rechercher et supprimer des répertoires de manière récursive sous Linux

  2. Ligne de commande :rechercher et remplacer dans tous les noms de fichiers correspondant à grep

  3. Comment lister récursivement tous les fichiers et répertoires

  4. Comment puis-je rechercher des répertoires et trouver des fichiers qui correspondent à regex ?

  5. Comment puis-je trouver tous les fichiers et répertoires accessibles en écriture par un utilisateur spécifique ?

Comment copier des fichiers et des répertoires sous Linux

Comment déplacer des fichiers et des répertoires sous Linux (commande mv)

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment synchroniser des fichiers et des répertoires à l'aide de Zaloha.sh

Comment sauvegarder des fichiers et des répertoires à l'aide de Rsync sous Linux