Bash

如何忽略警告,但保留來自“查找”的錯誤消息

  • January 15, 2021

我正在嘗試執行find命令,由於文件夾的設置方式,我的腳本中不斷收到以下警告:

find -L ./server/ -type f -printf '%s %p\n' | <rest of really long complicated script>

輸出

find: File system loop detected; ‘./server/~andreas/root’ is part of the same file system loop as ‘./’.
find: File system loop detected; ‘./server/~bob/root’ is part of the same file system loop as ‘./’.
find: File system loop detected; ‘./server/~charles/root’ is part of the same file system loop as ‘./’.
...

我知道為什麼我會收到這些消息。這些符號連結是故意放置在那裡供其他腳本使用的,所以我想安全地忽略控制台輸出中的這些警告。

如何防止find顯示*“檢測到文件系統循環”之*類的警告,但仍保留所有“真實”錯誤消息?

我不能只是告訴find忽略每個名為root. find 有一個-nowarn選項,但無論我把它放在哪裡,我都無法讓它工作。到目前為止,我還沒有找到用於查找的“日誌級別”選項。

如果您使用的是 bash shell,則可以通過以下方式過濾 stderr 來使用輸出重定向來抑制特定錯誤消息grep

find ... 2> >(grep -v "File system loop detected") | ...

這在 bash 手冊/手冊頁的“程序替換”部分中進行了描述:https ://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution

引用自:https://unix.stackexchange.com/questions/629237