如果我尝试
du -s -h -x /*
它将尝试检查直接安装在 / 下的所有文件系统(真实的和伪的),例如 /dev、/proc、/sys、/run 和 /home(/home 位于额外的分区上)。
我认为它来自 * 的 shell 扩展,为 du 提供了一个明确包含这些挂载点的参数列表。
有没有办法让 du 不检查已挂载的文件系统,即使挂载点包含在参数列表中?
我真的不想输入 / 的所有子目录只是为了避免它们出现在参数列表中。
答案1
您仍然可以使用以下方法进行过滤mountpoint
(如果您的系统上可用):
for a in /*; do mountpoint -q -- "$a" || du -s -h -x "$a"; done
如果mountpoint
不可用但是stat
是(虽然stat
仍然不是 POSIX,但它可能更常见),您将必须stat
手动比较输出:
rootdevice="$(stat -c %D /)"
for a in /*; do [ "$rootdevice" = "$(stat -c %D -- "$a")" ] && du -s -h -x "$a"; done
答案2
我想你是对的。你实际上是在说,,,du /dev
所以“ -x”选项毫无意义。du /sys
du /usr
du /home
你为什么不循环遍历它?例如find / -maxdepth 1 | egrep -v home|media
将列出除 home 和 media 之外的所有目录。然后你可以将输出通过管道传送到while
循环中du
。
find / -maxdepth 1 | egrep -v home|media | while read f; do
du -s -h -x "$f";
done
答案3
*
在您的命令中不使用du
。请使用类似命令:
du -hx --max-depth=1| sort -h
或者
du -hx / --max-depth=1| sort -h