Comment puis-je trouver un mot dans des fichiers spécifiques correspondant à un modèle. par exemple. recherche de version
dans CMake*
fichiers trouvés récursivement dans le répertoire courant.
Réponse acceptée :
Si vous voulez voir le nom du fichier et le numéro de ligne, POSIXly :
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
(vous ne voulez pas utiliser ;
ici qui exécuterait un grep
par dossier). C'est l'équivalent standard du GNUisme :
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
find
(dans le premier), xargs
(dans le second) passera autant d'arguments à grep
que possible sans dépasser la limite du nombre d'arguments que vous pouvez passer à une commande. Lors de ce fractionnement, il peut arriver que pour la dernière exécution, un seul argument soit passé à grep
auquel cas grep
n'imprimerait pas le nom du fichier. C'est pourquoi vous avez besoin de /dev/null
là (ou -H
avec GNU grep
).
Avec -type f
, nous ne considérons que les fichiers normaux (pas les périphériques, les liens symboliques, les canaux, les répertoires…).
Si vous voulez utiliser GNUisms, vous pouvez utiliser GNU grep
possibilité de descendre une arborescence de répertoire :
grep -rHnF --include='CMake*' version .
Vous ne voulez pas utiliser -R
car cela provoque grep
pour suivre les liens symboliques lors de la descente de l'arborescence des répertoires et lire à partir des périphériques, fifos, sockets…
Cette version est plus sûre et plus efficace, mais pas portable.