Ubuntu grep、find 等:「權限被拒絕」和「沒有這樣的檔案或目錄」輸出

Ubuntu grep、find 等:「權限被拒絕」和「沒有這樣的檔案或目錄」輸出

當我使用greporfind時,我總是對“權限被拒絕”和“沒有這樣的文件或目錄”通知感到惱火,如下所示:

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'

相關內容