web-dev-qa-db-fra.com

Comment utiliser Grep pour trouver une chaîne de texte dans les fichiers des sous-dossiers d'un dossier parent sans commutateur -R

J'utilise Solaris 10 et j'ai deux versions grep une dans /usr/bin et un dans /usr/xpg4/bin. Je cherche une réponse à la recherche sur la recherche de texte dans les fichiers dans les sous-dossiers d'un répertoire parent à l'aide de grep. Toutes les réponses parlent de -r ou -R Commutateurs que je n'ai pas disponibles avec ma version de grep.

6
DemiSheep

La syntaxe standard (POSIX) est la suivante:

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

(les /dev/null est de vous assurer que grep imprime toujours un nom de fichier). Cela fonctionnera sur tous les systèmes POSIX, y compris Solaris. Les seuls systèmes post-90 connus où ce qui est connu de ne pas travailler est vieux (très vieux maintenant) GNU Systems.

GNU initialement introduit un -print0 prédicat et a -0 Option à xargs au lieu de cela:

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

Il existe maintenant quelques autres implémentations qui soutiennent cela, mais pas Solaris.

Au-dessus, en théorie, vous voudriez ajouter -r option pour éviter de courir grep s'il n'y a pas de fichier, mais ce n'est pas aussi portable et dans ce cas particulier, ne fait pas de faire une différence fonctionnelle

15
cuonglm