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?


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


6

Essayez de rediriger stderrvers /dev/null.

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

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

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.


0

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

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.