Bash 不同单位的总和大小
对于上下文,我试图计算docker图像在我的机器上拍摄的总大小(以字节为单位)。我知道docker system df,但我想了解我通常如何做到这一点 如果我运行Bash 不同单位的总和大小,bash,docker,awk,Bash,Docker,Awk,对于上下文,我试图计算docker图像在我的机器上拍摄的总大小(以字节为单位)。我知道docker system df,但我想了解我通常如何做到这一点 如果我运行docker image ls-a,我会得到如下结果: REPOSITORY TAG IMAGE ID CREATED SIZE debian 8 00b72214a37e
docker image ls-a
,我会得到如下结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
debian 8 00b72214a37e 3 days ago 129MB
debian latest 971452c94376 3 days ago 114MB
现在我想对SIZE
列求和,这样我就可以用tail+2
删除第一行,然后使用awk
对第七列求和(使用):
此命令将正确地给出以MB(243MB)为单位的总大小
但是,如果图像的大小以GB为单位,awk
会将其添加到总和中,但会忽略单位,因此,例如,相同的命令会在以下图像上返回244MB而不是1.243GB:
REPOSITORY TAG IMAGE ID CREATED SIZE
debian 8 00b72214a37e 3 days ago 129MB
debian latest 971452c94376 3 days ago 114MB
debian latest 971452c94376 3 days ago 1GB
如何调整命令以使其支持具有不同度量前缀的大小(或一般值)?我不一定希望以任何方式格式化输出,例如,以字节为单位的输出就可以了。使用
bash
中的不同docker
命令,您可以可靠地执行此操作:
tot=
读取id时;做
((tot+=$(docker image inspect--format='{{.Size}}'$id)))
done这个
是什么?是this
用不同的度量后缀求和一些值,这些值可以表示任何东西,还是this
获取任何Unix设备上目录中文件的总大小,或者是this
其他东西?@EdMorton正是这样,如何用不同的度量后缀求和值。它甚至可以扩展到以不同的非公制单位求和,如秒和分;虽然有些方法可以解决前者,但不能解决后者。谢谢,docker image inspect--format={{.Size}}
帮助了我!有点让人困惑的是,这以字节为单位给出了大小,而docker image ls
以人类可读的格式给出了大小-我本来希望为此必须传递-h
标志,就像ls-h
一样。无论如何,我想出了一个可怕的管道,显然不是正确的方法。如果我从Docker那里抽象出这个答案,我想一般的方法是找到如何获得相同度量后缀中的所有值;do tot+=尺寸;printf“%s\t%d\n”$id“$size”;完成<@LéaGris:That.Size
不是字节,而是人类可读的格式。
REPOSITORY TAG IMAGE ID CREATED SIZE
debian 8 00b72214a37e 3 days ago 129MB
debian latest 971452c94376 3 days ago 114MB
debian latest 971452c94376 3 days ago 1GB