Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 不同单位的总和大小_Bash_Docker_Awk - Fatal编程技术网

Bash 不同单位的总和大小

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图像在我的机器上拍摄的总大小(以字节为单位)。我知道docker system df,但我想了解我通常如何做到这一点

如果我运行
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