Ubuntu grep, find etc: "Permissão negada" e "Não existe esse arquivo ou diretório"


17

Quando uso grepou find, sempre me irrito com os avisos "Permissão negada" e "Não existe esse arquivo ou diretório", algo como isto:

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

Como posso evitá-los e fazer com que eu só veja dados relevantes, ou seja, algo que realmente estou procurando?


Respostas:


24

com grep, você pode especificar a bandeira -s, que faz praticamente o que o @ortang disse

-s, --no-messages Suprime mensagens de erro sobre arquivos inexistentes ou ilegíveis. Nota sobre portabilidade: diferentemente do GNU grep, o 7th Edition Unix grep não estava em conformidade com o POSIX, porque faltava -q e sua opção -s se comportava como a opção -q do GNU grep. O grep no estilo USG também não possuía -q, mas sua opção -s se comportava como o GNU grep. Os scripts de shell portáteis devem evitar -q e -s e redirecionar a saída padrão e de erro para / dev / null.

com encontrar, tanto quanto eu sei resposta @ortangs é o melhor. algo como

find / -name "myfile" -type f -print 2>/dev/null


6

Tente redirecionar stderrpara /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

Redirecionar strerrpara /dev/null(aka black hole) é uma boa maneira de suprimir erros de permissão negada.

No entanto, observe que esse ferimento não apenas suprime as permission deniedmensagens, mas TODAS as mensagens de erro.

Se você deseja reter outras mensagens de erro permission denied, pode fazer algo assim:

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

Se você não deseja retê-las, o seguinte seria ótimo -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
Você não pode grep algo que já foi redirecionado para / dev / null.
choroba

@choroba Corrigida a resposta. Era para escrever em 2>&1vez de 2> /dev/nullpara a primeira sugestão.
Jaypal singh

Sim, você deve redirecionar stderrpara o stoutprimeiro.
ortang

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Use o sudocomando para elevar o comando para ter privilégios administrativos.


0

Usar "| &" antes que o grep -v lide com isso, por exemplo

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.