Je voudrais lister les fichiers de manière récursive et unique qui contiennent le mot donné.
Exemple : Vérification du mot « check », je fais normalement est un grep
$ grep check * -R
Mais comme il y a de nombreuses occurrences de ce mot, jobtiens beaucoup de sortie. Jai donc juste besoin de lister les noms de fichiers qui contiennent le mot de recherche donné. Je suppose quune astuce avec find
et xargs
suffirait ici, mais pas sûr.
Des idées?
Réponse
Utilisez -l
ou --files-with-matches
option qui est documentée comme suit:
Supprimer la sortie normale; à la place, imprimez le nom de chaque fichier dentrée à partir duquel la sortie aurait normalement été imprimée. Le scan sarrêtera lors de la première correspondance. (
-l
est spécifié par POSIX.)
Donc, pour votre exemple, vous pouvez utiliser ce qui suit:
$ grep check * -lR
Commentaires
Réponse
find . -type f -exec grep -l check {} +
Vous ne voulez probablement pas utiliser loption -R
qui avec les versions modernes de GNU grep
suit les liens symboliques lors de la descente de répertoires. Utilisez plutôt loption -r
qui depuis la version 2.12 (avril 2012) ne suit plus les liens symboliques.
Si votre grep nest pas celui de GNU, ou est plus ancien que la version 2.12, ou si vous avez besoin que votre code soit portable sur des systèmes GNU non à la pointe de la technologie, utilisez find
ci-dessus.
Sinon, vous pouvez faire:
grep -rl check .
Nutilisez pas *
(car cela omettrait les fichiers cachés dans le répertoire courant (et dans le répertoire courant uniquement) et causerait des problèmes pour les fichiers dont le nom commence par -
), évitez de passer options après les arguments car ce nest pas garanti doit fonctionner en fonction de lenvironnement et nest pas portable.
Réponse
Essayez ceci:
find . -type f | xargs grep -c check $1 | grep -v ":0"
Quant aux grep
indicateurs …
-c
sera renvoie un nom de fichier suivi de: et un nombre indiquant combien de fois la chaîne de recherche apparaît dans le fichier donné.
-v
prendra la sortie du premier grep
rechercher, filtrer les fichiers avec zéro résultat et imprimer uniquement les fichiers avec des résultats différents de zéro.
Commentaires
- Cela obtiendra un faux négatif si vous avez des fichiers (ou des directeurs (s)) dont les noms contiennent
:0
. Il vaut mieux ' fairegrep -v ':0$'
. Même cela étouffera les noms de chemin contenant une ou plusieurs nouvelles lignes.
Réponse
grep -lR "text-to-find" <where-to-find>
fonctionne également très bien.
Par exemple, grep -lR "NAVIGATE" .
où nous trouvons le mot NAVIGATE
dans le .
dans le répertoire courant.
Réponse
grep -rin « whatToFind » locationToFInd
eg $ grep -rin « vihaan ».
recherchera et listera récursivement les noms de fichiers et les lignes correspondantes qui contiennent « vihaan », « . » fait référence au répertoire courant.
Réponse
find . -type f | grep "keyword" *
recherche dans le répertoire courant. Pour effectuer une recherche depuis la racine, spécifiez /
au lieu de .
Réponse
grep -rli trim \` find . -name *.q \`
Vous donne la liste des .q
fichiers contient le mot-clé trim
grep -rl "text to find" "/usr/share"
et cela a très bien fonctionné!