我想计算目录及其所有子目录的大小。但我已经创建了一些从挂载点挂载的子目录。 (使用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
在每个文件上运行)。