Ubuntu grep, buscar, etc.: salida "Permiso denegado" y "No existe tal archivo o directorio"


17

Cuando yo 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 hacerlo para que solo vea datos relevantes, es decir, algo que realmente estoy buscando?


Respuestas:


22

con grep podría especificar la marca -s que hace más o menos lo que dijo @ortang

-s, --no-mensajes Suprima los mensajes de error sobre archivos inexistentes o ilegibles. Nota de portabilidad: a diferencia de GNU grep, la séptima edición de Unix grep hizo   no cumple con POSIX, porque carecía de -q y su opción -s                 se comportó como la opción -q de grep de GNU. El grep de estilo USG también carecía de -q pero su opción -s se comportaba como grep de GNU. Cáscara portátil   Los scripts deben evitar tanto -q como -s y deben redirigir el estándar y                 salida de error a / dev / null en su lugar.

Con encontrar por lo que sé, @ortangs respuesta es la mejor. algo como

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


6

Intenta redirigir stderr a /dev/null.

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

5

Redirigiendo el strerr a /dev/null (a.k.a black hole ) es una buena manera de suprimir los permisos denegados errores.

Sin embargo, tenga en cuenta que esta herida no solo suprime permission denied mensajes pero TODOS error de mensajes.

Si desea conservar otros mensajes de error que no sean permission denied entonces puedes hacer algo como esto

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

Si no desea conservarlos, lo siguiente sería correcto:

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

1
No puede grep algo que ya ha sido redirigido a / dev / null.
choroba

@choroba Han corregido la respuesta. Destinado a escribir 2>&1 en lugar de 2> /dev/null por primera sugerencia.
jaypal singh

Sí, tienes que redirigir stderr a stout primero.
ortang

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

Utilizar el sudo comando para elevar el comando para tener privilegios administrativos.


0

Utilizando "| & amp;" antes de que grep -v se ocupe de ello, por ejemplo,

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.