#!/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" }
Example with output in bytes
$ sumSize ${fsizes[@]} "B" Sum is 1341003608883.2 B
Example in kilobytes
$ sumSize ${fsizes[@]} "K" Sum is 1309573836.8 K
Example in megabytes
$ sumSize ${fsizes[@]} "M" Sum is 1278880.7 M
Example in gigabytes
$ sumSize ${fsizes[@]} "G" Sum is 1248.90693359375 G
Example in terabytes
$ sumSize ${fsizes[@]} "T" Sum is 1.2196356773376464 T
source share