El otro día estaba escribiendo un script en el que quería mostrar en pantalla, entre otras cosas, la cantidad de información traspasada por rsync entre dos máquinas. La cantidad la tenía en bytes y me interesaba mostrarla en KB, MB o GB.
Dicen que reinventar la rueda es una pérdida de tiempo, así que me puse a buscar alguna función en sh que lo hiciese. Y me tropecé con esta: bytestohr escrita en ksh.
Tras unos pequeños ajustes para que funcionase en sh, aquí va:
bytestohr()
{
# Convert input parameter (number of bytes)
# to Human Readable form
#
SLIST="bytes,KB,MB,GB,TB,PB,EB,ZB,YB"
POWER=1
VAL=$( echo "scale=2; $1 / 1" | bc)
VINT=$( echo $VAL / 1024 | bc )
while [ $VINT -gt 0 ]
do
POWER=$(expr $POWER + 1)
VAL=$( echo "scale=2; $VAL / 1024" | bc)
VINT=$( echo $VAL / 1024 | bc )
done
echo $VAL $( echo $SLIST | cut -f $POWER -d, )
}
Dicen que reinventar la rueda es una pérdida de tiempo, así que me puse a buscar alguna función en sh que lo hiciese. Y me tropecé con esta: bytestohr escrita en ksh.
Tras unos pequeños ajustes para que funcionase en sh, aquí va:
bytestohr()
{
# Convert input parameter (number of bytes)
# to Human Readable form
#
SLIST="bytes,KB,MB,GB,TB,PB,EB,ZB,YB"
POWER=1
VAL=$( echo "scale=2; $1 / 1" | bc)
VINT=$( echo $VAL / 1024 | bc )
while [ $VINT -gt 0 ]
do
POWER=$(expr $POWER + 1)
VAL=$( echo "scale=2; $VAL / 1024" | bc)
VINT=$( echo $VAL / 1024 | bc )
done
echo $VAL $( echo $SLIST | cut -f $POWER -d, )
}
Como cualquier otra función en sh, la forma de llamarla es la siguiente:
$ bytestohr 65456456
62.42 MB
Simple pero efectiva.
No hay comentarios:
Publicar un comentario