如何忽略警告,但保留“查找”中的错误消息

如何忽略警告,但保留“查找”中的错误消息

我正在尝试运行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选项,但无论我把它放在哪里,我都无法让它工作。到目前为止我还没有找到查找的“日志级别”选项。

答案1

如果您使用的是 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

相关内容