如何比较两个目录的大小?

我想比较不同文件系统上的两个目录dir1dir2的总大小,以便如果diff -r dir1 dir2返回0那么总大小将相等。 du命令返回磁盘使用情况,其选项--apparent-size不能解决问题。 我现在使用类似的东西

 find dir1 ! -type d |xargs wc -c |tail -1 

知道dir1大小的近似值。 有更好的解决scheme吗?

编辑:例如,我有( diff -r dir1 dir2返回0:它们是相等的):

 du -s dir1 --> 540 du -s dir2 --> 166 du -sb dir1 --> 250815 (the -b option is equivalent to --apparent-size -B1) du -sb dir2 --> 71495 find dir1 ! -type d |xargs wc -c --> 62399 find dir2 ! -type d |xargs wc -c --> 62399 

我无法清楚地知道你想要什么。 也许你想要这个?
diff <(du -sh dir1) <(du -sh dir2)

如果你的find版本有-printf你可能会觉得这样会更快一些。

 find dir1 ! -type d -printf "%s\n" | awk '{sum += $1} END{print sum}' 

AWK中至少有两种方法可以避免输出大数字的科学记数法。

 END {OFMT = "%.0f"; print sum} END {printf "%.0f\n", sum} 

.0截断小数位,因为我们真的在处理一个整数,并且gawk的%d似乎在版本3.1.5(但不是3.1.6和更高版本)中的错误行为与%g相似。

但是,从gawk文档:

注意:当使用整数格式控制字母来处理最宽C整数类型范围之外的值时,“gawk”切换到“%g”格式说明符。

注意超过AWK系统/版本的最大整数。