我想比较不同文件系统上的两个目录dir1
和dir2
的总大小,以便如果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系统/版本的最大整数。