277 votes

Comment puis-je avoir grep pas imprimer 'Aucun fichier ou répertoire' erreurs?

Je suis grepping à travers un gros tas de code géré par git, et chaque fois que je fais un grep, je vois des tas et des tas de messages de la forme:

> grep pattern * -R -n
whatever/.git/svn: No such file or directory

Est-il possible que je peux faire de ces lignes s'en aller?

386voto

Dogbert Points 44003

Vous pouvez utiliser l' -s ou --no-messages drapeau à supprimer les erreurs.

-s, --no-messages supprimer les messages d'erreur

grep pattern * -s -R -n

69voto

Steve Prentice Points 7638

Si vous êtes grepping par le biais d'un dépôt git, je vous recommandons d'utiliser git grep. Vous n'avez pas besoin de passer -R ou le chemin d'accès.

git grep pattern

Qui montrera tous les matches de votre répertoire courant vers le bas.

17voto

lunixbochs Points 7475

Les erreurs de ce type sont généralement envoyés à la "erreur type" stream, vous pouvez diriger vers un fichier ou tout simplement faire disparaître la plupart des commandes:

grep pattern * -R -n 2>/dev/null

4voto

cokedude Points 118

Avez-vous essayé l' -0 option dans xargs? Quelque chose comme ceci:

ls -r1 | xargs -0 grep 'some text'

4voto

cadrian Points 4102

J'ai l'habitude de ne pas laisser grep faire la récursivité lui-même. Il ya généralement un certain nombre de répertoires que vous voulez sauter.git, .svn...)

Vous pouvez faire intelligent des alias avec des positions comme celle-là:

find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;

Il peut sembler exagéré, à première vue, mais quand vous avez besoin de filtrer certains modèles il est très pratique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X