Usar grep -r
cegamente em /
não é uma boa ideia. Vários diretórios (por exemplo, /dev
e /proc
) contêm arquivos especiais que não devem ser acessados de maneira descontrolada - isso pode apenas sobrecarregar sua tela com erros, esperar até o fim do mundo ou até travar o sistema.
Você precisa usar find
para impedir que a pesquisa desça para esses diretórios e deixe arquivos especiais sozinhos :
-
Use opções
-path
negadas explícitas:find / -maxdepth 2 -type f ! -path '/proc/*' ! -path '/dev/*' -exec grep "xxx" {} +
-
Use a opção
-prune
:find / -maxdepth 2 -path '/proc' -prune -o -path '/dev' -prune -o -type f -exec grep "xxx" {} +
-
Use a opção
-xdev
para evitar a descida para outros sistemas de arquivos completamente:find / -maxdepth 2 -xdev -type f -exec grep "xxx" {} +
-type f
só permite arquivos regulares. Você pode usar quantas opções -path
e / ou -prune
forem necessárias para ajustar a saída de find
.
Observe também o uso da variação -exec ... +
de -exec
que chama grep
com vários arquivos, em vez de lançar um processo grep
separado para cada um deles.
Alternativamente, você pode usar xargs
para chamar grep
:
find / -maxdepth 2 -xdev -type f -print0 | xargs -r -0 grep "xxx"
Aqui é uma resposta minha mais antiga a uma questão relacionada ...