web-dev-qa-db-fra.com

Comment puis-je faire en sorte que grep n'imprime pas les erreurs «Aucun fichier ou répertoire»?

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

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

Est-ce que je peux faire en sorte que ces lignes disparaissent?

197
Alex

Vous pouvez utiliser le drapeau -s ou --no-messages pour supprimer les erreurs.

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

grep pattern * -s -R -n
271
Dogbert

Si vous passez par un dépôt git, je vous recommande d'utiliser git grep. Vous n'avez pas besoin de passer -R ou le chemin.

git grep pattern

Cela affichera tous les résultats de votre répertoire actuel.

57
Steve Prentice

Les erreurs de ce type sont généralement envoyées au flux "erreur standard", que vous pouvez diriger vers un fichier ou faire disparaître avec la plupart des commandes:

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

J'ai vu cela se produire plusieurs fois, avec des liens rompus (liens symboliques pointant vers des fichiers inexistants), grep tente de rechercher dans le fichier cible qui n'existe pas (d'où le message d'erreur correct et précis).

Normalement, je ne me dérange pas lorsque je fais des tâches sysadmin sur la console, mais dans les scripts, je recherche les fichiers texte avec "find", puis grep chacun d'eux:

find /etc -type f -exec grep -nHi -e "widehat" {} \;

Au lieu de:

grep -nRHi -e "widehat" /etc
5
Isaac Uribe

D'habitude, je ne laisse pas grep faire la récursivité. Il y a généralement quelques répertoires que vous voulez ignorer (.git, .svn ...)

Vous pouvez faire des pseudonymes intelligents avec des positions comme celle-là:

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

Cela peut sembler exagéré à première vue, mais il est assez pratique de filtrer certains motifs.

4
cadrian

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

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

Utilisez -I dans grep.

Exemple: grep SEARCH_ME -Irs ~/logs.

1
Bala