grep
Wenn 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 stderr
zu /dev/null
.
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Antwort3
Umleitung strerr
zu/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 denied
Nachrichten unterdrückt, sondernALLEFehlermeldungen.
Wenn Sie Fehlermeldungen dennoch behalten möchten, permission denied
kö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'