Você está recebendo esses erros de Permission denied
porque existem alguns arquivos python que o usuário não tem permissão para ler, então o grep não está não funcionando para esses arquivos (você não pode pesquisá-los) .
Você quer "livrar-se de" os erros Permission denied
.
-
Você pode adicionar
2>/dev/null
ao final do seu comando assim:grep -rn --include="*.py" "search-pattern" 2>/dev/null
Isso suprime todas as mensagens de erro, para que você não veja os erros
Permission denied
aparecendo. Mas, obviamente, isso ainda significa que o grep não está pesquisando esses arquivos, portanto, se eles contiverem seu padrão de pesquisa, você não os verá na saída.Explicação :
No Linux, há três itens chamados descritores de arquivos :stdin
,stdout
stderr
. Se você executar um comando e der um erro, o erro será gravado no descritor de arquivostderr
. Por padrão,stderr
envia os erros para o terminal. Então, o que podemos fazer é redirecionar os erros, ou seja, redirecionamosstderr
para outro lugar em vez do terminal. Nós redirecionamos as coisas no Linux usando o sinal>
. Então, para onde vamos redirecionarstderr
? Codificar%./dev/null
é um arquivo especial; pense nisso como um buraco negro. Qualquer coisa que você redirecionar para ele é jogado fora. Por fim, nos referimos a/dev/null
como simplesmente o númerostderr
. Então2
diz ao Linux para redirecionar2>/dev/null
para2
./dev/null
significa1
(que é a saída normal de um comando, ou seja, não erros). Portanto, por exemplo, se você quiser salvar a saída real do seu comando grep em um arquivo em vez de exibi-lo no terminal, usestdout
, que redirecionará1>/path/to/filename
para esse arquivo. -
Use
stdout
com seu comando, supondo que você tenha os privilégios:sudo grep -rn --include="*.py" "search-pattern"
Se o seu nome de usuário tiver privilégios de root (ou seja, se você for um administrador na máquina), use
sudo
antes de um comando ser executado como usuário root, assim você nunca obterásudo
erros e grep pesquisará esses arquivos e exibirá o padrão de pesquisa se os encontrar dentro deles.