Bash
如何忽略警告,但保留來自“查找”的錯誤消息
我正在嘗試執行
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