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

raf*_*fak 6 linux bash command-line

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

find dir1 ! -type d |xargs wc -c |tail -1
Run Code Online (Sandbox Code Playgroud)

知道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 
Run Code Online (Sandbox Code Playgroud)

zjh*_*hui 6

我不知道你想要什么.也许你想要这个?
diff <(du -sh dir1) <(du -sh dir2)


Pau*_*ce. 4

如果您的版本find有,-printf您可能会发现这要快得多。

find dir1 ! -type d -printf "%s\n" | awk '{sum += $1} END{print sum}'
Run Code Online (Sandbox Code Playgroud)

至少有两种方法可以避免在 AWK 中输出大量数字时使用科学记数法。

END {OFMT = "%.0f"; print sum}

END {printf "%.0f\n", sum}
Run Code Online (Sandbox Code Playgroud)

截断.0小数位,因为我们实际上处理的是整数,而 gawk 的%d行为似乎不正确,就像%g3.1.5 版本(但不是 3.1.6 及更高版本)。

然而,从gawk文档来看:

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

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