當我使用grep
orfind
時,我總是對“權限被拒絕”和“沒有這樣的文件或目錄”通知感到惱火,如下所示:
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
我怎麼能避免它們並使其只看到相關數據,即我真正正在尋找的數據?
答案1
使用 grep 你可以指定 -s 標誌,它的作用與@ortang所說的差不多
-s, --無訊息 禁止顯示有關不存在或不可讀文件的錯誤訊息。可移植性說明:與 GNU grep 不同,第七版 Unix grep 不符合 POSIX,因為它缺少 -q 並且其 -s 選項的行為類似於 GNU grep 的 -q 選項。 USG 風格的 grep 也缺少 -q,但其 -s 選項的行為類似於 GNU grep。可移植 shell 腳本應避免使用 -q 和 -s,並應將標準和錯誤輸出重新導向至 /dev/null。
據我所知, find @ortangs 的答案是最好的。就像是
find / -name "myfile" -type f -print 2>/dev/null
答案2
嘗試重定向stderr
到/dev/null
.
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
答案3
重新導向strerr
至/dev/null
(又名black hole
)是抑制權限被拒絕錯誤的好方法。
然而,請注意,這個傷口不僅抑制permission denied
訊息,而且全部錯誤訊息。
如果您確實希望保留除此之外的錯誤訊息,permission denied
您可以執行以下操作 -
grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log
如果您不想保留這些,那麼以下內容就可以了 -
grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
答案4
在 grep -v 之前使用“|&”將處理它,例如
grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'