Une de mes commandes BASH préférées est:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
qui recherche le contenu spécifié de SearchString dans le contenu de tous les fichiers situés dans et sous le répertoire en cours. En tant que développeur, cela s’est parfois révélé utile.
Cependant, en raison de mon projet actuel et de la structure de ma base de code, j'aimerais rendre cette commande BASH encore plus évoluée en ne recherchant aucun fichier situé dans ou sous un répertoire contenant ".svn", ni aucun fichier se termine par ".html"
La page MAN pour trouver un peu me confond cependant. J'ai essayé d'utiliser -une, et cela m'a donné un comportement étrange. En essayant de ne sauter que les pages .html (pour commencer), j'ai essayé:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
et n'a pas eu le comportement que j'espérais. Je pense que je pourrais manquer le point de -prune. Pourriez-vous m'aider?
Merci
grep -rl 'SearchString'
find
à rechercher dans un fichier.
-name '*.*'
ne trouve pas tous les fichiers: uniquement ceux qui ont un .
nom (l’utilisation de *.*
est typiquement un DOS-isme, alors qu’en Unix, vous n’utilisez normalement que *
pour cela). Pour vraiment faire correspondre tous, il suffit de retirer l'argument tout à fait: find . -exec ...
. Ou si vous souhaitez uniquement appliquer grep aux fichiers (et ignorer les répertoires), faites-le find . -type f -exec ...
.
find
n'est pas une commande