我试图过滤包含find
命令中权限被拒绝的行。
如果我正在运行:
find ~ -name "fifo" | grep "Permission denied"
输出是正确的:
find: ‘/home/nroby/.cache/dconf’: Permission denied
find: ‘/home/nroby/.dbus’: Permission denied
find: ‘/home/nroby/.config/enchant’: Permission denied
但是,如果我使用-v
选项:find ~ -name "fifo" | grep -v "Permission denied"
输出是:
find: ‘/home/nroby/.cache/dconf’: Permission denied
find: ‘/home/nroby/.dbus’: Permission denied
/home/nroby/Desktop/Linux/fifo
find: ‘/home/nroby/.config/enchant’: Permission denied
答案 0 :(得分:6)
说Permission denied
的行来自stderr
,而不是stdout
。终端显示两个流,但管道仅重定向stdout
(因此,使用您的命令,grep
永远不会看到包含Permission denied
的行。
所以,如果您只想让这些消息静音,请改为:
find ~ -name "fifo" 2>/dev/null
2>
重定向stderr
。
如果由于某种原因需要同时管道stdout
和stderr
(例如,您希望输出中存在其他错误消息),则可以执行以下操作:< / p>
find ~ -name "fifo" 2>&1 | grep -v "Permission denied"
2>&1
将stderr
重定向到stdout
。