Use simplesmente isto:
grep -r "text" | grep -i -v ^sys/
Você pode adicionar muito "| grep -i -v ^ dir /" conforme necessário.
Nota: esta não é uma duplicata. Estou lidando com uma determinada instância em que as opções do grep para excluir diretórios / caminhos não se comportam de uma maneira esperada.
Estou tentando usar o grep para pesquisar recursivamente o meu sistema de arquivos raiz. Estou tentando excluir determinados diretórios, como /proc
, /sys
e /usr/local
. Se eu usar --exclude-dir=${DIR_NAME}
, ele não pesquisará em caminhos abaixo de ${DIR_NAME}
, mas isso também significa que se recusará a pesquisar caminhos abaixo de ${DIR_NAME}
se ${DIR_NAME}
estiver em um nível abaixo do diretório de trabalho atual. Como exemplo, considere esta árvore do sistema de arquivos:
${PWD}/
data/
settings/
sys/
users/
developer/
projects/
my_os/
build/
src/
apps/
sys/
Makefile
extras/
sys/
apps/
os/
Se eu quiser que minha pesquisa exclua ${PWD}/sys
e tudo nela, grep -rl --exclude-dir=sys
a excluirá, mas também excluirá ${PWD}/data/settings/sys
e ${PWD}/users/developer/projects/my_os/src/sys
, dois diretórios que desejo incluir na minha pesquisa.
Eu estava originalmente esperando que --exclude-dir
/ --exclude
permitisse expressões regulares e encontrei este comentário indicando que eles fazem, mas parece que a sintaxe da expressão regular não afeta o comportamento do utilitário (por exemplo, "^/(dev|proc)"
). Eu estou bem se essas duas opções não usam expressões regulares, mas eu não quero que o padrão de exclusão seja aplicado a componentes de caminho singular. Existe alguma maneira de fazê-lo funcionar assim?
Use simplesmente isto:
grep -r "text" | grep -i -v ^sys/
Você pode adicionar muito "| grep -i -v ^ dir /" conforme necessário.
Tags grep