Skip to content

Shell - Widget: Size Convert

Description

Voici une petite fonction permettant de formater une taille donnée (Bytes|Octet) afin de la rendre lisible.

Elle prend en argument :

  • La valeur (Défaut:0)
  • L'unité de mesure (B, KB, MB, GB, TB) (Défaut:B)
  • Décimal après la virgule (Défaut:1)

Exemples

Voici quelques exemples d'utilisation

size_conv 6000 KB
> 5.9 MB
size_conv 8000 GB
> 7.8 TB
size_conv 4099 MB 4
> 4.0029 GB
./size.sh 4099 MB 0
> 4 GB

Code

size_conv() { #Arg $size $val $dec_nb
    size=${1:-0}
    val=${2:-'B'}
    dec_nb=${3:-1}

    val_lst=('B' 'KB' 'MB' 'GB' 'TB' 'PB')
    nb_re='^[0-9]+$'
    nb_max=22

    (( ${#size} >= nb_max )) && { echo "<!> Number is too Big [Max:${nb_max}]" >&2; exit 1; }
    [[ ! $val =~ $nb_re ]] && [[ ! $dec_nb =~ $nb_re ]] && { echo "<!> Bad Value" >&2; exit 1; }

    cnt=0

    for v in ${val_lst[@]}; do
        (( cnt++ ))
        if [ $val == $v ] && [ $v != ${val_lst[${#val_lst[@]}-1]} ]; then
            (( ${size%.*} >= 1024 )) && { size=$(echo "$size / 1024" | bc -l); val=${val_lst[$cnt]}; }
        fi
    done

    printf "%.${dec_nb}f %s\n" ${size} ${val}
}
Back to top