60

我正在尝试评估一些 Unix 用户帐户的磁盘使用情况。简单地说,我正在使用以下命令:

du -cBM --max-depth=1 | sort -n

但是我看到了很多如下错误消息。如何从显示中排除所有此类“权限被拒绝”消息?

du: `./james/.gnome2': Permission denied

通过将“find”替换为“du”,我的请求可能与以下列表非常相似。

如何从“查找”中排除所有“权限被拒绝”消息?

以下线程不起作用。我想我正在使用bash。

使用 --exclude、grep -v 或 sed 从 du 命令输出中排除隐藏文件

4

6 回答 6

95
du -cBM --max-depth=1 2>/dev/null | sort -n 

或者在 bash 中更好(只是过滤掉这个特定的错误,而不是像最后一个片段一样)

du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 
于 2013-02-28T17:38:53.003 回答
7

2> /dev/nul 仅隐藏错误消息。

命令 du 总是尝试遍历目录。想象一下,您有数千个目录?

du 需要 eval,如果您有权限运行,如果没有,请按照下一个目录...

于 2013-03-25T18:53:37.737 回答
5

我会使用一些简洁的东西,只排除你不想看到的行。将 stderr 重定向到 stdout,并用 grep 排除所有“拒绝”:

du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n 
于 2017-09-24T23:31:29.523 回答
2

如果2>/dev/null不起作用,可能您使用的 shell 不是bash.

要检查您使用的外壳,您可以尝试ps -p $$(请参阅https://askubuntu.com/a/590903/130162

于 2017-11-02T15:40:21.827 回答
2

为了消除来自 du 命令的所有错误,我使用了这个:

du -sh 2>&1 | grep -v  '^du:'
于 2021-08-12T13:03:26.290 回答
1

您可以将其通过管道传输到一个临时文件,例如 -

杜... > temp_file

错误会打印在终端上,只有磁盘使用信息会打印到 temp_file 中。

于 2020-05-27T23:16:43.980 回答