包含 K、M、G、T 的总文件大小

Posted

技术标签:

【中文标题】包含 K、M、G、T 的总文件大小【英文标题】:Sum file sizes that contain K, M, G, T 【发布时间】:2012-01-06 15:07:31 【问题描述】:

如果(在 zsh 中)我有一个包含以下内容的数组:

echo $fsizes[@]
9.5M 100M 5G 15G 1.2T

有没有一种简单的方法可以在选择的输出中获得这些总和(即字节、兆字节、千兆字节等?)

【问题讨论】:

我想,计算总和的最简单方法是使用一个单位的大小。以字节为例。 【参考方案1】:
#!/bin/zsh

fsizes=( 9.5M 100M 5G 15G 1.2T )

typeset -A unit
unit=( B 1 K 1024 M 1048576 G 1073741824 T 1099511627776 )

sumSize()
    sum=0
    for sz; do
        u=$sz//[^BKMGT]/
        n=$sz//$u/
        b=$unit[$u]
        (( sum += b * n ))
    done
    out="$@:(-1)"
    echo "Sum is $(( sum / $unit[$out] )) $out"

以字节为单位的输出示例

$ sumSize $fsizes[@] "B"
Sum is 1341003608883.2 B

以千字节为单位的输出示例

$ sumSize $fsizes[@] "K"
Sum is 1309573836.8 K

以兆字节为单位的输出示例

$ sumSize $fsizes[@] "M"
Sum is 1278880.7 M

以千兆字节为单位的输出示例

$ sumSize $fsizes[@] "G"
Sum is 1248.90693359375 G

以 TB 为单位的输出示例

$ sumSize $fsizes[@] "T"
Sum is 1.2196356773376464 T

【讨论】:

我可能需要一些时间才能弄清楚,但我知道这是 +1 材料! :)

以上是关于包含 K、M、G、T 的总文件大小的主要内容,如果未能解决你的问题,请参考以下文章

linux 查看当前文件夹大小

k、M、G、T 以后的硬盘大小单位是多少?为啥叫B,B是啥意思?

linux下以K,M,G为单位显示当前目录下的文件大小

Ubuntu 查看当前目录使用的总空间大小

linux下如何统计部分文件大小,有很多文件夹,还包含子文件件夹,统计出所有包含‘123’的文件的总大小

从包含 url 的文本文件中获取 url 的文件大小