du -x 在使用通配符时仍会检查挂载的文件系统

Mar*_* N. 6 linux mount filesystems du

如果我尝试

du -s -h -x /*
Run Code Online (Sandbox Code Playgroud)

它将尝试检查直接安装在 / 下的所有文件系统(真实的和伪的),例如 /dev、/proc、/sys、/run 和 /home(/home 位于额外的分区上)。

我认为它来自*的shell扩展,给du一个明确包含这些挂载点的参数列表。

有没有办法让 du 不检查挂载的文件系统,即使挂载点包含在参数列表中?

我真的不想输入 / 的所有子目录只是为了避免它们出现在参数列表中。

Bat*_*hyX 4

您仍然可以使用以下方法进行过滤mountpoint(如果您的系统上可用):

for a in /*; do mountpoint -q -- "$a" || du -s -h -x "$a"; done
Run Code Online (Sandbox Code Playgroud)

如果mountpoint不可用但可用stat(虽然stat仍然不是 POSIX,但它可能更常见),您将stat必须手动比较输出:

rootdevice="$(stat -c %D /)"
for a in /*; do [ "$rootdevice" = "$(stat -c %D -- "$a")" ] && du -s -h -x "$a"; done
Run Code Online (Sandbox Code Playgroud)