Use find / -readable -print0 | xargs -0 grep -H "some_str" em vez de grep -r . (Requer GNU find , mas grep -r é GNUish então suspeito que não seja um problema).
Mas na verdade não é tão "óbvio" que seja mais rápido; grep -r permite que a chamada open() descubra que você não pode lê-la, enquanto a versão find precisa stat() , então grep a open() - e a parte mais cara disso, para arquivos que não são legíveis, é o kernel que converte nomes de caminho em nós de índice do sistema de arquivos. (Na verdade, pesquisar arquivos legíveis será a maior parte do tempo de execução, para arquivos de tamanho significativo.) A abordagem mais rápida é apenas acrescentar 2>/dev/null ao grep -r , para que não haja perda de tempo na impressão de mensagens de erro. para retardar terminais.