La tuyauterie de trouver des résultats dans grep rapide du répertoire d'exclusion

Je suis avec succès à l'aide de la recherche pour créer une liste de tous les fichiers dans le sous-répertoire actuel, à l'exclusion de celles dans le sous-répertoire "cache". Voici mon premier bout de code:

find . -wholename './cach*' -prune -o -print

Je souhaite maintenant pipe en une commande grep. Il semble que ce devrait être simple:

find . -wholename './cach*' -prune -o -print | xargs grep -r -R -i "samson"

... mais c'est le retour des résultats qui sont pour la plupart du répertoire de cache. J'ai essayé de supprimer les xargs de référence, mais qu'est-ce que vous attendez, l'exécution de la commande grep sur le texte des noms de fichiers, plutôt que sur les fichiers eux-mêmes. Mon objectif est de trouver des "samson" dans tous les fichiers qui ne sont pas mis en cache de contenu.

Je vais probablement contourner ce problème en utilisant simplement doublé grep dans ce cas, mais je suis très curieux de savoir pourquoi ce one-liner se comporte de cette manière. J'aimerais entendre les pensées sur une manière de le modifier tout en continuant d'utiliser ces deux commandes (comme il y a de la vitesse d'avantages à le faire de cette façon).

(C'est dans CentOS 5, btw.)

OriginalL'auteur eternalnewb | 2012-07-19