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?

Falsch über alles
quelle
Siehe auch
Léo Léopold Hertz 준영

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

Matchew
quelle
6

Versuchen Sie Umleitung stderrzu /dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
ortang
quelle
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
Jaypal Singh
quelle
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.

Nurlan
quelle
0

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

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