Quando uso grep
or 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 stderr
para /dev/null
.
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Responder3
Redirecionando o strerr
para/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 denied
mensagens, mas tambémTODOSmensagens de erro.
Se você deseja reter mensagens de erro de outra permission denied
forma, 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'