Sizes of sum files that contain K, M, G, T

If (in zsh) I have an array that contains something like this:

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

Is there an easy way to get the sum of them in the output selection element (i.e., bytes, megabytes, gigabytes, etc.?)

+4
source share
1 answer
 #!/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 
+5
source

Source: https://habr.com/ru/post/1389674/


All Articles