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.