包含 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 的总文件大小的主要内容,如果未能解决你的问题,请参考以下文章
k、M、G、T 以后的硬盘大小单位是多少?为啥叫B,B是啥意思?