[ssfr] Re: [SSFR] Partage de fonctions ... |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
>
> Quelles fonctions, concoctees par vos soins, utilisez vous le plus souvent
> ?
A part ça en voilà une en bash qui convertit une taille en octets en quelque
chose de lisible par un humain (par ex. 2.36Go). Il y'a peut-être plus simple
mais je me suis bien amusé à l'écrire, c'est le principal. Les noms de
paramètres sont très mal choisis et peut-être pas évidents.
Attention si vous traduisez ou changez la liste des unités, pensez à changer
aussi le x"Tb" de la ligne suivante ou c'est la boucle infernale.
# human_size SIZE [BLOCK-SIZE [CEIL [SCALE]]]
#
# SIZE: une taille en octets
# BLOCK-SIZE: facteur utilisé pour l'unité (1Ko = BLOCK-SIZE octets)
# defaut=1024
# CEIL: seuil de changement d'unité pour écrire par exemple .97Mb
# au lieu de 1000Ko ; defaut=1000
# SCALE: nombre de décimales du résultat ; defaut=2
#
human_size()
{
local -i size=$1 block_size=${2:-1024} ceil=${3:-1000} scale=${4:-2}
local -i factor=1
local unit
for unit in B Kb Mb Gb Tb; do
if [ $size -lt $((ceil*factor)) ] || [ x"$unit" = x"Tb" ]
then
[ $factor -ne 1 ] || scale=0
echo $(echo "scale=$scale; $size/$factor" | bc)"${unit}"
return
fi
factor=$((factor*block_size))
done
}
--
Cédric Lucantis
---