我经常发现自己不得不清理一些目录,因为它们太满了。我们举/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
成功了。