我看到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函数实现相同的结果?
谢谢
du
最初用于查找文件在存储介质(磁盘)上占用的空间大小。这就是为什么它相当于向上而不是向下的主要原因。一个已启动的已分配块总是被“完全”使用,即使它只使用了两个字节。
您的情况似乎旨在计算文件中的字节数,而不管它们占用的存储空间。为此,du
有选择--apparent-size
。然后,它显示文件的大小,而不是磁盘使用。结合--block-size=1
,这更简单拼写为-b
。
接下来就是你要将像14204477032
这样的大数字转换成像13.2GB
这样的整洁版本。你还在评论中指出14G
(正如-h
会产生的)对你的品味不够精确,而且你还提供了一个awk
脚本,它可以完成这个转换,因此你已经有了一个可行的解决方案。
我不知道除awk
之外的任何标准Unix工具,或者甚至更复杂的东西,如perl
或python
,它们会以更容易的方式执行此操作。还有其他人正在寻找解决方案,而你的是最好的解决方案。
所以我的建议就是这样:坚持你的解决方案。我建议的唯一改进是使用位移(>> 10
)而不是除法(/ 1024
),但这只是品味问题。