如何计算文件树的磁盘使用情况但不包括目录。
我想要这样的东西:
du --exclude type d
我使用 rsync 来镜像/备份我的主目录的一部分,我想在备份后仔细检查总大小,但由于某种原因,一个目录在源和目标上的大小不同,即:12288 B 和 16384 B。虽然显然大多数目录都有 4096 B.
源和目标都是 ext4。
答案1
只需向其提供您想要使用的所有内容的列表--files0-from
find -type f -print0 | du --files0-from=-
答案2
如果您有 GNU find,您可以让它打印文件大小。
find /source ! -type d -printf '%P %s\n'
对输出进行排序以获得确定性输出。如果文件名包含换行符,则可以为不同的排列获得相同的排序输出,但除非有意设计,否则这种情况不会发生。
comm -3 <(find /source ! -type d -printf '%P %s\n') <(find /destination ! -type d -printf '%P %s\n')
答案3
两个建议的答案是针对 Linux 的。这里有一个建议,坚持 POSIX:
#!/bin/sh
find "$@" -type f |\
xargs du -s |\
awk 'BEGIN {total = 0;} { total += $1; } END { print total; }'
或者,您可以尝试解决路径名中的空格(仍然是 POSIX):
#!/bin/sh
find "$@" -type f -exec du -s {} + |\
awk 'BEGIN {total = 0;} { total += $1; } END { print total; }'
顺便说一句,OP要求总尺寸;由于某种原因,其他答案试图按文件给出大小的细分。
进一步阅读:
答案4
我相信您正在寻找的是--max-depth
。
例如。如果您想计算一个目录的磁盘使用情况而不包含其所有子目录,则可以这样做。
du [directory name] --max-depth=1
如果您也想查找其子目录的大小,只需增加深度即可。
我找到了一个链接,其中提供了有关如何使用的大量信息,du
如果这没有帮助您可以查看此网站杜。其中提供了大量有关du
.