linux - 可以使用 du 获得正确的文件大小
问题描述
我看到我在 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
脚本,该脚本可以进行这种转换,以便您已经有了一个可行的解决方案。
我不知道有任何标准的 Unix 工具awk
,甚至更复杂的东西,比如perl
或者python
更容易做到这一点的东西。还有其他人正在为此寻找解决方案,而您的解决方案是最好的。
所以我的建议就是:坚持你的解决方案。我建议的唯一改进是使用位移 ( >> 10
) 而不是除法 ( / 1024
),但这只是个人喜好问题。
推荐阅读
- javascript - 元素加载上的 jQuery 触发器不起作用
- javascript - 有人可以解释这种奇怪的行为(nodejs + mongoose)吗?
- function - 是否可以在 TCL 程序中按名称传递参数?
- javascript - [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性 'correct_answer'”
- python - 我尝试在 driver.find_elements_by_css_selector 中加载新值,不要用新值更新
- javascript - 在 JavaScript 中计算画布数组中位数的有效方法
- node.js - 使用 node.js 将图像上传到 s3
- azure - Microsoft-Graph - 作为 Azure AD 管理员,您如何为其他用户获取有效的 access_token
- swift - 如何检查用户的电子邮件是否经过验证?
- xml - xQuery FLWOR 我将如何计算出现的单词的频率