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?

wrong-about-everything
fuente
Relacionado: stackoverflow.com/a/25234419/54964
Léo Léopold Hertz 준영

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

matchew
fuente
6

Intenta redirigir stderr a /dev/null.

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

Nurlan
fuente
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'
Fluffball
fuente