我正在尝试运行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