![查看哪个目录占用空间,不考虑其他挂载点](https://linux22.com/image/526389/%E6%9F%A5%E7%9C%8B%E5%93%AA%E4%B8%AA%E7%9B%AE%E5%BD%95%E5%8D%A0%E7%94%A8%E7%A9%BA%E9%97%B4%EF%BC%8C%E4%B8%8D%E8%80%83%E8%99%91%E5%85%B6%E4%BB%96%E6%8C%82%E8%BD%BD%E7%82%B9.png)
我经常发现自己不得不清理一些目录,因为它们太满了。我们举/var
个例子,这是一个很常见的例子,原因很明显。
为了查看哪些子目录占用了大量空间,我使用了du -sh /var/*
。不幸的是,我的 子目录中有一些大量数据/var
,这些数据恰好托管在其他分区上/var
(例如/var/chroot
),这大大减慢了进程。
现在du
有一个-x
排除其他挂载点的标志。它在执行 时工作正常,du -shx /var
但不能执行 ,du -shx /var/*
因为*
shell 会扩展 ,所以/var/chroot
会明确发送到du
。
我被建议的另一个选择是使用find /var -xdev -mindepth 1 -maxdepth 1 -exec du -sh {} \+
但同样,即使 find 没有跟随其他挂载点,它仍然印刷它们并将它们传递给du
,因此再次未能实现我的目标。
在我最终编写一个可怕的 bash 函数(或一个 perl/python 程序)来解析df
或mount
循环之前,是否有人知道一种干净的方法来实现我想要做的事情?
答案1
看起来你需要的是这个:
du -hx --最大深度 1 /var
答案2
我从一位同事那里得到了答案:
du -hx --max-depth=1 /var
成功了。