Je recherche dans une application Ruby on Rails for a Word using grep
on OSX, and j'aimerais exclure les répertoires qui correspondent à un certain modèle.
J'utilise la commande suivante:
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'
Cette commande ne fait pas ce que je pensais qu'elle ferait. Voici comment je pensais cela fonctionnerait:
En termes de répertoires d'exclusion, la commande finit toujours par rechercher dans les répertoires './ git' et './ log', ainsi que dans './app/assets'
Je manque évidemment de connaissances fondamentales, mais je ne sais pas ce que c'est.
La description de la page de manuel pour cette option est en quelque sorte trompeuse ... C'est un modèle comme dans globs pas un modèle comme dans expression régulière . Par la page info
:
--exclude-dir = GLOB
Ignorez tout répertoire de ligne de commande dont le suffixe de nom correspond au modèle GLOB. Lors d'une recherche récursive, ignorez tout sous-répertoire dont le nom de base correspond à GLOB. Ignorez toutes les barres obliques redondantes dans GLOB.
Donc, dans votre cas, vous pouvez exécuter:
grep -inRw -E 'direct' . --exclude-dir={git,log,assets}
pour exclure les répertoires nommés git
, log
et assets
ou par ex.
grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}
pour exclure les noms de répertoire se terminant par git
ou commençant par asset
.
--exclude-dir
ne comprend pas |
.
Vous pouvez cependant obtenir le même effet en spécifiant --exclude-dir
plusieurs fois, un pour chaque répertoire que vous souhaitez exclure:
grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'