Basta spostare il reindirizzamento al primo comando, ovvero
find ... 2>/dev/null | xargs ...
Oppure puoi racchiudere tutto tra parentesi:
(find ... | xargs ...) 2>/dev/null
Per reindirizzare stderr a /dev/null usa:
some_cmd 2>/dev/null
Non hai bisogno di xargs
qui. (E tu non lo vuoi! Dal momento che esegue la suddivisione delle parole)
Usa l'opzione exec di find:
find . -type f -name "*.txt" -exec grep -li needle {} +
Per sopprimere i messaggi di errore utilizzare il -s
opzione di grep
:
Da man grep
:
-s, --no-messagesElimina i messaggi di errore relativi a file inesistenti o illeggibili.
che ti dà:
find . -type f -name "*.txt" -exec grep -lis needle {} +