Déplacez simplement la redirection vers la première commande, c'est-à-dire
find ... 2>/dev/null | xargs ...
Ou vous pouvez tout mettre entre parenthèses :
(find ... | xargs ...) 2>/dev/null
Pour rediriger stderr vers /dev/null, utilisez :
some_cmd 2>/dev/null
Vous n'avez pas besoin de xargs
ici. (Et vous n'en voulez pas ! puisqu'il effectue la séparation des mots)
Utilisez l'option exec de find :
find . -type f -name "*.txt" -exec grep -li needle {} +
Pour supprimer les messages d'erreur, utilisez le -s
possibilité de grep
:
À partir de man grep
:
-s, --no-messagesSupprime les messages d'erreur concernant les fichiers inexistants ou illisibles.
ce qui vous donne :
find . -type f -name "*.txt" -exec grep -lis needle {} +