Simplemente mueva la redirección al primer comando, es decir,
find ... 2>/dev/null | xargs ...
O puede encerrar todo entre paréntesis:
(find ... | xargs ...) 2>/dev/null
Para redirigir stderr a /dev/null use:
some_cmd 2>/dev/null
No necesitas xargs
aquí. (¡Y no lo quieres! ya que realiza división de palabras)
Use la opción exec de find:
find . -type f -name "*.txt" -exec grep -li needle {} +
Para suprimir los mensajes de error, use el -s
opción de grep
:
Desde man grep
:
-s, --no-messagesSuprimir mensajes de error sobre archivos inexistentes o ilegibles.
que te da:
find . -type f -name "*.txt" -exec grep -lis needle {} +