SOLUÇÃO 1 (combinar find
e grep
)
O objetivo desta solução não é lidar com o grep
desempenho, mas mostrar uma solução portátil: também deve funcionar com a versão do busybox ou GNU anterior à 2.5.
Use find
, para excluir diretórios foo e bar:
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
Em seguida, combine find
e o uso não recursivo de grep
, como uma solução portátil:
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
SOLUÇÃO 2 (uso recursivo de grep
):
Você já conhece essa solução, mas eu a adiciono, pois é a solução mais recente e eficiente. Observe que esta é uma solução menos portátil, mas mais legível por humanos.
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Para excluir vários diretórios, use --exclude-dir
como:
--exclude-dir={node_modules,dir1,dir2,dir3}
SOLUÇÃO 3 (Ag)
Se você pesquisar com freqüência o código, o Ag (The Silver Searcher) é uma alternativa muito mais rápida ao grep, personalizada para a pesquisa de código. Por exemplo, ele ignora automaticamente os arquivos e diretórios listados em .gitignore
, para que você não precise passar as mesmas opções de exclusão complicadas para grep
ou find
.