Esta resposta do SE me fez perceber que posso excluir diretórios usando expressões regulares com grep. Mas não está funcionando para mim ao usar |
:
results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*|node_modules')
results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*\|node_modules')
Existe outra maneira de escrever esse regex para excluir diretórios que começam com um ponto final e node_modules?
Pelo menos para o GNU grep,
--exclude
parece esperar um padrão glob e não um regex - a resposta à sua pergunta vinculada alude àquela onde diz "Observe que o significado de --exclude-dir é diferente para pcregrep e grep. Leia o correspondente manuais para obter detalhes." . Especificamente:Em
man grep
:Em
man pcregrep
:Pelo menos no GNU grep, você pode usar
--exclude-dir
várias vezes se quiser excluir vários padrões:Eu mudei
.[^.]*
para.?*
como:..
se essa era a intenção, já que você está pesquisando no diretório atual aqui (omitindo os arquivos de destino com-r
padrões.
nas versões recentes do GNUgrep
, exceto que acho que com o GNUgrep
3.11 pelo menos, até--exclude-dir='*'
falha para excluí-lo, então--exclude-dir='.*'
seria suficiente com essa versão se você não especificasse nenhum diretório de destino)...foo
ou...
[^.]
é[!.]
(embora[^.]
também seja frequentemente suportado, pelo menos em sistemas GNU).Por que não usar
find
?Finalmente: