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?

errado sobre tudo
fonte
Relacionado: stackoverflow.com/a/25234419/54964
Léo Léopold Hertz 준영

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

matchew
fonte
6

Tente redirecionar stderrpara /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
ortang
fonte
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
jaypal singh
fonte
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.

Nurlan
fonte
0

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

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Fluffball
fonte