You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中如何在du输出结果中使用grep -v排除指定内容?

问题原因与解决办法

你的命令没过滤掉错误行,核心原因是:du的权限错误信息输出到标准错误流(stderr),而管道|仅传递**标准输出流(stdout)**的内容,这些错误信息根本没经过grep处理,所以会直接显示出来。

另外你写的grep -v "*cannot read directory*"里的星号是多余的——grep默认匹配子串,不需要通配符星号,反而会被当成普通字符处理,导致匹配不到目标内容。

修正后的命令

方法一:保留正常输出,过滤错误行

把stderr重定向到stdout,让错误信息进入管道被grep处理:

du -hs * 2>&1 | sort -hr | grep -v "cannot read directory"

方法二:直接丢弃所有错误信息

如果不需要保留错误提示,直接把stderr输出到/dev/null即可:

du -hs * 2>/dev/null | sort -hr

补充说明

2>&1是Shell重定向语法:

  • 2是标准错误流的文件描述符
  • &1表示将stderr的内容重定向到当前stdout的位置,这样错误信息就会和正常输出合并进入后续管道。

内容的提问来源于stack exchange,提问作者SHM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:52:45