Ubuntu grep, find etc: "Erlaubnis verweigert" und "Keine solche Datei oder Verzeichnis" ausgegeben


17

Wenn ich grepoder benutze find, ärgere ich mich immer über die Hinweise "Erlaubnis verweigert" und "Keine solche Datei oder kein solches Verzeichnis".

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

Wie kann ich sie umgehen und es so gestalten, dass nur relevante Daten angezeigt werden, nach denen ich wirklich suche?


Antworten:


24

mit grep könnte man das -s flag angeben, das ziemlich genau das macht, was @ortang gesagt hat

-s, --no-messages Unterdrückt Fehlermeldungen zu nicht vorhandenen oder nicht lesbaren Dateien. Hinweis zur Portabilität: Im Gegensatz zu GNU grep entsprach Unix grep in der 7. Edition nicht POSIX, da die Option -q fehlte und sich die Option -s wie die Option -q von GNU grep verhielt. USG-style grep fehlte ebenfalls -q, aber die Option -s verhielt sich wie GNU grep. Portable Shell-Skripte sollten sowohl -q als auch -s vermeiden und stattdessen Standard- und Fehlerausgaben nach / dev / null umleiten.

mit find soweit ich weiß @ortangs antwort ist das beste. etwas wie

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


6

Versuchen Sie Umleitung stderrzu /dev/null.

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

5

Das Umleiten von strerrto /dev/null(aka black hole) ist eine gute Möglichkeit, Fehler zu unterdrücken, denen die Berechtigung verweigert wurde.

Beachten Sie jedoch, dass diese Wunde nicht nur permission deniedMeldungen, sondern ALLE Fehlermeldungen unterdrückt .

Wenn Sie andere Fehlermeldungen beibehalten möchten, permission deniedkönnen Sie Folgendes tun:

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

Wenn Sie diese nicht behalten möchten, ist Folgendes in Ordnung -

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
Sie können nicht nach etwas greifen, das bereits nach / dev / null umgeleitet wurde.
Choroba

@choroba Habe die Antwort korrigiert. Soll schreiben 2>&1statt 2> /dev/nullfür den ersten Vorschlag.
Jaypal Singh

Ja, müssen Sie umleiten stderrzu stoutersten.
oder

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

Verwenden Sie den sudoBefehl, um den Befehl zu erweitern und Administratorrechte zu erhalten.


0

Verwenden Sie "| &", bevor das grep -v sich darum kümmert, z

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.