排除来自“du”的所有权限被拒绝的消息

问题描述 投票:0回答:7

我正在尝试评估多个 Unix 用户帐户的磁盘使用情况。 简而言之,我使用以下命令:

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

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

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

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

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

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

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

linux shell warnings suppress-warnings du
7个回答
115
投票
du -cBM --max-depth=1 2>/dev/null | sort -n 

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

du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 

11
投票

要删除来自 du 命令的所有错误,我使用了以下命令:

du -sh 2>&1 | grep -v  '^du:'

10
投票

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

命令 du 总是尝试在目录上运行。想象一下您有数千个目录?

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


8
投票

我会使用简洁的内容,仅排除您不想看到的行。将 stderr 重定向到 stdout,然后 grep 排除所有“拒绝”:

du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n 

2
投票

如果

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

要检查您使用的 shell,您可以尝试

ps -p $$
(请参阅 https://askubuntu.com/a/590903/130162


2
投票

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

du ... > temp_file

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


0
投票

另一种选择:

sudo du / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n

我更喜欢并使用另一种选择,只显示顶级目录和人类二进制前缀(尽管不是真正的顺序):

sudo du -h -d 1 / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n

输出示例:

0   /dev
0   /proc
0   /sys
2.2G    /opt
2.6M    /run
4.0K    /cdrom
4.0K    /srv
7.4G    /snap
8.7G    /usr
12K /media
16K /lost+found
19M /etc
24G /var
48K /mnt
67M /volumes
86M /root
240K    /tmp
295G    /home
305M    /boot
338G    /

相反,如果您想要真正的排序(但不太可读),请尝试:

sudo du -d 1 / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n

输出示例:

0   /dev
0   /proc
0   /sys
4   /cdrom
4   /srv
12  /media
16  /lost+found
48  /mnt
240 /tmp
2632    /run
19216   /etc
68260   /volumes
87512   /root
311420  /boot
2237740 /opt
7755733 /snap
9018580 /usr
25068772    /var
308849688   /home
353419881   /
© www.soinside.com 2019 - 2024. All rights reserved.