Ubuntu grep, find etc: "Autorisation refusée" et "Aucun fichier ou répertoire"

17

Lorsque j'utilise grepou find, je suis toujours ennuyé par les avis "Autorisation refusée" et "Aucun fichier ou répertoire", quelque chose comme ceci:

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

Comment puis-je les éviter et faire en sorte que je ne voie que les données pertinentes, c'est-à-dire quelque chose que je recherche vraiment?

mal à tout
la source
Connexe: stackoverflow.com/a/25234419/54964
Léo Léopold Hertz 준영

Réponses:

24

avec grep, vous pouvez spécifier le drapeau -s qui fait à peu près ce que @ortang a dit

-s, --no-messages Supprime les messages d'erreur concernant les fichiers inexistants ou illisibles. Note sur la portabilité: contrairement à GNU grep, la 7e édition Unix grep n'était pas conforme à POSIX, car il manquait -q et son option -s se comportait comme l'option -q de GNU grep. Le grep de style USG manquait également -q mais son option -s se comportait comme le grep GNU. Les scripts shell portables devraient éviter à la fois -q et -s et devraient plutôt rediriger la sortie standard et d'erreur vers / dev / null.

avec trouver autant que je sache @ortangs réponse est la meilleure. quelque chose comme

find / -name "myfile" -type f -print 2>/dev/null

matchew
la source
6

Essayez de rediriger stderrvers /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
ortang
la source
5

La redirection strerrvers /dev/null(aka black hole) est un bon moyen de supprimer les erreurs d'autorisation refusée.

Cependant, notez que cette blessure supprime non seulement les permission deniedmessages mais TOUS les messages d'erreur.

Si vous souhaitez conserver des messages d'erreur autres que ceux- permission deniedlà, vous pouvez faire quelque chose comme ça -

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

Si vous ne souhaitez pas conserver ceux-ci, alors ce serait bien -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
jaypal singh
la source
1
Vous ne pouvez pas grep quelque chose qui a déjà été redirigé vers / dev / null.
choroba
@choroba Ont corrigé la réponse. Destiné à écrire 2>&1au lieu de 2> /dev/nullpour la première suggestion.
jaypal singh
Oui, vous devez d'abord rediriger stderrvers stout.
ortang
3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Utilisez la sudocommande pour élever la commande pour avoir des privilèges administratifs.

Nurlan
la source
0

Utiliser "| &" avant que grep -v ne s'en occupe, par exemple

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Fluffball
la source