计算没有从同一设备绑定安装子目录的目录大小

计算没有从同一设备绑定安装子目录的目录大小

我想计算目录及其所有子目录的大小。但我已经创建了一些从挂载点挂载的子目录。 (使用mount -B/--bind

当我使用du -hks返回的大小时,包括已安装的目录。有没有办法从结果中消除它们的大小?

编辑: 我计算大小的目录都位于同一位置。有一个主目录,其中包含所有其他目录的共享内容(其中包含所有安装点),并且目录有一些单独的文件。目标是计算单个文件的大小。

答案1

曼杜:

   -x, --one-file-system
          skip directories on different file systems

答案2

du -x(至少 GNU 和 busybox du)被 Linux 绑定挂载所愚弄,因为文件具有相同的设备 ID,因此您需要手动修剪挂载点。使用 GNU du

du -xhs --exclude=./bind/mount/point

或者,您可以使用 GNUfind查找文件并打印其磁盘使用情况,调用命令mountpoint来了解要修剪哪些目录(这些目录是绑定安装)。然后用awk它来求和(像du这样只计算硬链接一次):

find . -xdev ! -name . -type d -exec mountpoint -q {} \; -prune -o \
       -printf '%i %b\n' |
  awk '!seen[$1]++ {s+=$2}
       END{printf "%.17g\n", s * 512}' |
  numfmt --to=iec

但这是相当低效的,因为它需要mountpoint为每个目录运行命令(请注意,也可以绑定挂载非目录文件,我们假设没有这样做以避免mountpoint在每个文件上运行)。

相关内容