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