Cuando uso grep
o find
, siempre me molestan los avisos de "Permiso denegado" y "No existe tal archivo o directorio", algo como esto:
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
¿Cómo puedo evitarlos y hacer que solo vea datos relevantes, es decir, algo que realmente estoy buscando?
Respuesta1
con grep puedes especificar el indicador -s que hace más o menos lo que dijo @ortang
-s, --no-mensajes Suprime mensajes de error sobre archivos inexistentes o ilegibles. Nota de portabilidad: a diferencia de GNU grep, el grep de Unix de la séptima edición no se ajustaba a POSIX, porque carecía de -q y su opción -s se comportaba como la opción -q de GNU grep. El grep estilo USG también carecía de -q pero su opción -s se comportaba como el grep GNU. Los scripts de shell portátiles deben evitar tanto -q como -s y, en su lugar, deben redirigir la salida estándar y de error a /dev/null.
Con find, hasta donde yo sé, la respuesta de @ortangs es la mejor. algo como
find / -name "myfile" -type f -print 2>/dev/null
Respuesta2
Intente redirigir stderr
a /dev/null
.
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Respuesta3
Redirigiendo el strerr
a/dev/null
(también conocido comoblack hole
) es una buena forma de suprimir errores de permiso denegado.
Sin embargo, tenga en cuenta que esta herida no sólo suprime permission denied
mensajes sino queTODOerror de mensajes.
Si desea conservar otros mensajes de error, permission denied
puede hacer algo como esto:
grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log
Si no desea conservarlos, lo siguiente estaría bien:
grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Respuesta4
Usar "|&" antes de grep -v lo solucionará, por ejemplo
grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'