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?
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
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.
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
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
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.
Avez-vous essayé l'option -0
dans xargs? Quelque chose comme ça:
ls -r1 | xargs -0 grep 'some text'
Utilisez -I
dans grep.
Exemple: grep SEARCH_ME -Irs ~/logs
.