我看到我在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功能获得相同的结果?
谢谢
答案 0 :(得分:1)
du
最初用于查找文件在存储介质(磁盘)上占用多少空间。这就是为什么舍入而不舍入的主要原因。即使已使用了其中的两个字节,已启动的已分配块也始终被完全“使用”。
您的情况似乎是旨在计数文件中的字节,而不管它们占用的存储空间如何。为此,du
具有选项--apparent-size
。然后,它会显示文件的大小,而不是磁盘的使用情况。与--block-size=1
结合使用,则拼写为-b
更为简单。
接下来的事情是,您想要将14204477032
之类的大量数字转换为13.2GB
之类的简洁版本。您还需要在评论中指出14G
(可能会产生-h
)不够精确,无法满足您的口味,并且 您还提供了awk
脚本,完全进行此转换,以便您已经有了可行的解决方案。
除awk
之外,我什至没有其他标准的Unix工具,甚至还没有更复杂的东西,例如perl
或python
,它们会以一种更为简单的方式来实现。还有其他人正在寻找解决方案,而您就是最好的解决方案之一。
所以我的建议就是:坚持您的解决方案。我建议的唯一改进是使用移位(>> 10
)而不是除法(/ 1024
),但这只是一个问题。