Ubuntu grep, find etc: Ausgabe „Zugriff verweigert“ und „Keine solche Datei oder kein solches Verzeichnis“

Ubuntu grep, find etc: Ausgabe „Zugriff verweigert“ und „Keine solche Datei oder kein solches Verzeichnis“

grepWenn ich oder verwende find, ärgern mich immer die Meldungen „Zugriff verweigert“ und „Datei oder Verzeichnis nicht vorhanden“, etwa so:

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 vermeiden und dafür sorgen, dass mir nur die relevanten Daten angezeigt werden, also das, wonach ich wirklich suche?

Antwort1

mit grep könnten Sie das Flag -s angeben, das so ziemlich das bewirkt, was @ortang gesagt hat

-s, --no-messages Unterdrückt Fehlermeldungen über nicht vorhandene oder nicht lesbare Dateien. Hinweis zur Portabilität: Anders als GNU grep war Unix grep der 7. Edition nicht POSIX-konform, da ihm -q fehlte und seine Option -s sich wie die Option -q von GNU grep verhielt. Grep im USG-Stil fehlte ebenfalls -q, aber seine Option -s verhielt sich wie GNU grep. Portable Shell-Skripte sollten sowohl -q als auch -s vermeiden und stattdessen die Standard- und Fehlerausgabe nach /dev/null umleiten.

mit find ist meines Wissens die Antwort von @ortang die beste. so etwas wie

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

Antwort2

Versuchen Sie eine Weiterleitung stderrzu /dev/null.

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

Antwort3

Umleitung strerrzu/dev/null(auch bekannt alsblack hole) ist eine gute Möglichkeit, Fehler aufgrund verweigerter Berechtigung zu unterdrücken.

Beachten Sie jedoch, dass diese Wunde nicht nur permission deniedNachrichten unterdrückt, sondernALLEFehlermeldungen.

Wenn Sie Fehlermeldungen dennoch behalten 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 völlig ausreichend:

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

Antwort4

Die Verwendung von "|&" vor dem grep -v behebt das Problem, z. B.

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

verwandte Informationen