Je cherche ça struct messages_sdd_t
et je dois chercher dans beaucoup de fichiers * .c pour le trouver. Cependant, je ne vois pas comment trouver une correspondance car je veux exclure tous les mots "struct" et "messages_sdd_t". Comme je veux effectuer une recherche sur cette seule structure, 'struct messages_sdd_t', la raison en est que struct est utilisé à plusieurs reprises et que je continue à obtenir des pages ou des résultats de recherche.
Je l'ai fait sans succès:
find . -type f -name '*.c' | xargs grep 'struct messages_sdd_t'
et ça
find . -type f -name '*.c' | xargs egrep -w 'struct|messages_sdd_t'
Merci beaucoup pour vos suggestions,
la source
xargs
n'échoue pas de cette façon. Il utilise la valeur système de la longueur maximale de l'argument et se divise en conséquence. Courirxargs --show-limits
pour voir ce qu'il utilise sur votre système spécifique. Si on a besoin d'utiliserfind
, c’est aussi bien de voir le-exec command {} +
construire dans le manuel qui va plus ou moins imiterxargs
directement dans la commande de recherche, avec le moins d'appels possible de sous-processus..c
fichiers dans le répertoire en cours, pas sous-répertoires.Ou si vous ne vous souciez que du nom de fichier:
la source
xargs
pourrait être mieux que-exec
; -exec va générer un processus grep pour chaque fichier.{} \;
Est-ce que. Si tu utilises{} +
, plusieurs fichiers seront traités par un seul processus grep.grep -l
au lieu degrep -q -print
?Cela va chercher récursivement et utiliser
grep
lui-même pour choisir seulement.c
des dossiers.Envisagez d'ajouter
-H
toujours écrire le nom du fichier avec la correspondance de ligne.la source