du --排除目录 - 这可能吗?

du --排除目录 - 这可能吗?

如何计算文件树的磁盘使用情况但不包括目录。

我想要这样的东西:

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.

相关内容