¿Cómo elimino las declaraciones de impresión de "permiso denegado" del programa find?

38

Código

find / -name netcdf

Salida

find: `/root/.dbus': Permission denied
find: `/root/.gconf': Permission denied
find: `/root/.gconfd': Permission denied
find: `/root/.gnome': Permission denied
find: `/root/.gnome2': Permission denied
find: `/root/.gnome2_private': Permission denied
InquilineKea
fuente
Relacionado: unix.stackexchange.com/q/290791/16920
Léo Léopold Hertz 준영

Respuestas:

35

Esos mensajes se envían a stderr y, en general, solo se ven esos mensajes en ese flujo de salida. Puede cerrarlo o redirigirlo en la línea de comandos.

$ find / -name netcdf 2>&-

o

$ find / -name netcdf 2>/dev/null

Además, si va a buscar en el directorio raíz (/), a menudo es bueno completar el proceso para que find no consuma todos los recursos.

$ nice find / -name netcdf 2>&-

Esto disminuye la prioridad del proceso permitiendo a otros procesos más tiempo en la CPU. Por supuesto, si nada más está usando la CPU, no hace nada. :) Para ser técnico, el valor NI (visto desde ps -l) aumenta el valor PRI. Los valores PRI más bajos tienen una prioridad más alta. Comparar ps -lcon nice ps -l.

Arcege
fuente
1
No me gusta tirar advertencias. Es mucho mejor manejarlos. Además, no se puede escapar aquí en el campo.
Léo Léopold Hertz 준영
1
@ LéoLéopoldHertz 준영 WEll ... si no puede ver la salida del programa porque su pantalla está llena de basura de error ... y este es el caso ...
salta el
20

Solo me gustaría señalar esta respuesta de @Gilles en Excluir rutas que hacen que se quejen de los permisos: Unix y Linux Stack Exchange ; Básicamente implica una construcción findque hace que no descienda directorios ilegibles, y en ese sentido, probablemente también sea un poco más rápido.

Esto parece funcionar para mí:

Con GNU findo cualquier otro findque admita los predicados -readabley -executable:

find / -type d ! \( -readable -executable \) -prune -o -type f -name netcdf -print

o también esto:

find / -type d ! -perm -g+r,u+r,o+r -prune -o -type f -name 'netcdf' -print

Por alguna razón, necesito agregar todos los g+r,u+r,o+r(atajos para eso a+r), de lo contrario, si uno de ellos se deja fuera, aún puedo obtener hits de "Permiso denegado".

Aquí hay un desglose de cómo veo esto (tenga en cuenta que el -aoperador (y) findestá implícito entre dos predicados ):

find /         # find starting from path /
  -type d        # match type is directory
  ! -perm -a+r   # (and) match not permissions of `r`ead present 
  -prune         # ignore what matched above and do not descend into it
  -o             # or (whatever didn't match above)
  -type f        # match type is file
  -name 'netcdf' # (and) match name is 'netcdf'
  -print         # print what matched above

Tenga en cuenta que sin el último -print, se muestran algunos elementos adicionales (que no tienen nada que ver con -name 'netcdf'); los -printasegura que se imprimen sólo coincide el nombre (si lo hay).

sdaau
fuente
2
Si find(1)no puede descender a un directorio, no lo hará. Por lo tanto, verificar de antemano si puede o no solo agregará trabajo (verifique dos veces), y así lo ralentizará.
vonbrand
3
@vonbrand es necesario si confía en findel estado de salida, porque estos errores de permiso hacen que la findsalida tenga un estado distinto de cero
Ernest A
No puedo hacer que su propuesta funcione. No obtengo salida cuando la salida esperada está llena. unix.stackexchange.com/q/290791/16920 Sin embargo, creo que de lo contrario creo que su método es la mejor manera de hacerlo.
Léo Léopold Hertz 준영
1
Wow, no puedo creer que haya sido tan difícil encontrar esta respuesta, ahora desearía poder hacer algo más que votarla.
Wedge
8

Use en su locate(1)lugar:

$ locate netcdf

Solo le mostrará los archivos que su usuario puede ver.

Warren Young
fuente
1
Esto supone que se updatedbestá ejecutando regularmente. Ese no es el caso en todos los sistemas Linux.
Arcege
3
Si está instalado localizar (1), su base de datos debe actualizarse periódicamente. Si eso no está sucediendo, clasificaría eso como una configuración incorrecta en lugar de una falla de ubicación (1). Además, solo lleva unos minutos ejecutarlo manualmente en los casos excepcionales en los que está buscando un archivo que se agregó desde la última actualización de la base de datos. Me encuentro haciendo eso tal vez media docena de veces al año, una sobrecarga fácilmente pagada por la ventaja de velocidad de localizar (1) sobre encontrar (1).
Warren Young