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