Re: [ssfr] Re: [SSFR] Partage de fonctions ...

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


* omer <omer@xxxxxxxxxx> [2008-04-10 14:09:43 +0200] wrote :

> >
> > 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
> }

L'option -h de ls etait plus rapide ;)


-- 
.. ''`.  (\___/) E d i   S T O J I C E V I C
: :'  : (='.'=) http://www.debianworld.org 
`. `~'  (")_(") GPG: 0x1237B032
  `-

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/