raf*_*fak 6 linux bash command-line
我想比较两个目录dir1和dir2不同文件系统的总大小,以便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)
如果您的版本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 系统/版本的最大整数。