可以使用du获得正确的文件大小

问题描述 投票:0回答:1

我看到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 filesize du
1个回答
1
投票

du最初用于查找文件在存储介质(磁盘)上占用的空间大小。这就是为什么它相当于向上而不是向下的主要原因。一个已启动的已分配块总是被“完全”使用,即使它只使用了两个字节。

您的情况似乎旨在计算文件中的字节数,而不管它们占用的存储空间。为此,du有选择--apparent-size。然后,它显示文件的大小,而不是磁盘使用。结合--block-size=1,这更简单拼写为-b

接下来就是你要将像14204477032这样的大数字转换成像13.2GB这样的整洁版本。你还在评论中指出14G(正如-h会产生的)对你的品味不够精确,而且你还提供了一个awk脚本,它可以完成这个转换,因此你已经有了一个可行的解决方案。

我不知道除awk之外的任何标准Unix工具,或者甚至更复杂的东西,如perlpython,它们会以更容易的方式执行此操作。还有其他人正在寻找解决方案,而你的是最好的解决方案。

所以我的建议就是这样:坚持你的解决方案。我建议的唯一改进是使用位移(>> 10)而不是除法(/ 1024),但这只是品味问题。

© www.soinside.com 2019 - 2024. All rights reserved.