【发布时间】:2025-11-29 17:50:02
【问题描述】:
我看到我在 aws s3 存储上的存储桶大小为 13.2GiB,它有 1570 个文件:
$ aws s3 ls --summarize --human-readable s3://mybucket/ | grep -E "(Total\sObjects|Total\sSize)"
Total Objects: 1570
Total Size: 13.2 GiB
当我下载这个存储桶时,我看到的是:
$du -sh ./test
14G
$wc -l ./test
1570
$ du -sb ./test
14204477032
$ du -sb ./test | awk '{ \
split( "B KB MB GB" , v ); \
s=1; \
while( $1>=1024 ) { \
$1/=1024; s++ \
} \
printf "%.1f%s", $1, v[s] \
}'
13.2GB
如何使用标准的 Linux 函数达到同样的效果?
谢谢
【问题讨论】:
-
"标准 Linux 函数" - awk 不算数吗?或者你需要 du 来四舍五入到小数点后 1 位吗?还有numfmt,如果这算得上更标准的话。
-
实际上不,numfmt 不支持强制小数位(令人讨厌的是它拒绝
--format %.1f:-( ),它为您的示例提供 14G。 -
du 的手册页上写着:'-h''--human-readable' 为每个大小附加一个大小字母,例如“M”表示兆字节。使用的是 1024 的幂,而不是 1000; “M”代表 1,048,576 字节。此选项等效于 --block-size=human-readable。如果您更喜欢 1000 的幂,请使用 --si 选项。
-
@LupusE,我读过,但问题 du round 大小有点奇怪,13.2 -> 14GB。我需要得到一个精确的文件大小。
-
你的命令应该是'du -sbh
' ...你正在比较'du -sh'(人类可读[1024]中'磁盘上的使用'的总和)和'du -sb(加上 awk)'(来自“文件大小”的总和)。当每个文件的大小不同或不是文件系统块大小的倍数时,“磁盘使用率”会更高。