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

时间:2010-09-22 12:31:49

标签: linux bash command-line

我想比较不同文件系统上两个目录dir1dir2的总大小,这样如果diff -r dir1 dir2返回0,则总大小将相等。 du命令返回磁盘使用情况,其选项--apparent-size无法解决问题。我现在使用像

这样的东西
find dir1 ! -type d |xargs wc -c |tail -1

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

编辑: 例如,我有(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 

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

如果您的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中错误地表现为%g(但不是3.1.6)后来)。

但是,来自gawk文档:

  

注意:对值使用整数格式控制字母时        超出最宽C整数类型范围的'gawk'        切换到'%g'格式说明符。

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