Ubuntu grep, find etc: saída “Permissão negada” e “Nenhum arquivo ou diretório”

Ubuntu grep, find etc: saída “Permissão negada” e “Nenhum arquivo ou diretório”

Quando uso grepor find, sempre fico irritado com os avisos "Permissão negada" e "Esse arquivo ou diretório não existe", algo assim:

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 veja apenas dados relevantes, ou seja, algo que realmente estou procurando?

Responder1

com grep você pode especificar o sinalizador -s que faz praticamente o que @ortang disse

-s, --sem mensagens Suprima mensagens de erro sobre arquivos inexistentes ou ilegíveis. Nota de portabilidade: ao contrário do GNU grep, a 7ª Edição 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 tinha -q, mas sua opção -s se comportava como o GNU grep. Os scripts de shell portáteis devem evitar -q e -s e devem redirecionar a saída padrão e de erro para /dev/null.

com find, até onde eu sei, a resposta do @ortangs é a melhor. algo como

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

Responder2

Tente redirecionar stderrpara /dev/null.

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

Responder3

Redirecionando o strerrpara/dev/null(também conhecido comoblack hole) é uma boa maneira de suprimir erros de permissão negada.

No entanto, note que esta ferida não apenas suprime permission deniedmensagens, mas tambémTODOSmensagens de erro.

Se você deseja reter mensagens de erro de outra permission deniedforma, você pode fazer algo assim -

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

Se você não deseja mantê-los, o seguinte seria suficiente -

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

Responder4

Usar "|&" antes do grep -v irá lidar com isso, por exemplo

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

informação relacionada