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

标签 shell sum zsh filesize

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

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

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

最佳答案

#!/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

关于shell - 包含 K、M、G、T 的总文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759880/

相关文章:

linux - awk 向文本添加颜色代码

regex - shell 脚本。如何使用正则表达式提取字符串

bash - 使用 bash 脚本解析文件

linux - 在 shell 脚本中设置 -e 和 set -x

r - 获取连续日值的总和

php - MySQL,对 TableView 的列求和

PHP:从数字列表中找到两个或更多数字,这些数字加起来达到给定数量

vim - 如何让 zsh 提示 vi 模式使用我的 .vimrc?

zsh - 在非交互式Shell中扩展别名

shell - 如何列出所有 zsh 自动完成?