exclude-dir
é grep
dependente da versão
A bandeira foi introduzida foi introduzida com > 2.5.2 :
+Version 2.5.2 + - The new option --exclude-dir allows to specify a directory pattern + that will be exclided (sic) from recursive grep.
(H / T para resposta da Johnsyweb sobre SO para rastrear a versão )
Quando implementado, ele funciona como uma lista regular de diretórios separados por vírgula a serem excluídos, sem espaços:
$ grep 'foo' -ri .
./a/test.txt:foo bar baz
./c/test.txt:foo bar baz
./b/test.txt:foo bar baz
$ grep 'foo' --exclude-dir={a,b} -ri .
./c/test.txt:foo bar baz
Alternativa, se sua versão de grep
não der suporte a {}
e você não quiser continuar digitando diretórios
Coloque os diretórios em uma matriz e expanda-os para o comando:
$ exclude=( "mail" ".cpanel" "tmp" )
$ for dir in ${exclude[@]}; do echo "--exclude-dir=$dir"; done
--exclude-dir=mail
--exclude-dir=.cpanel
--exclude-dir=tmp
Use como abaixo:
$ grep 'world' $(for dir in ${exclude[@]}; do echo "--exclude-dir=$dir"; done) -ri .
Explicação : a substituição $()
colocará seus --exclude-dir
s como argumentos no grep grep
.