Portál AbcLinuxu, 10. listopadu 2025 05:39
FILENAME="/tmp/test"
SIZE=$(du -sb $FILENAME | awk '{ print $1 }')
if ((SIZE<1024))
then
echo "$SIZE B"
elif ((SIZE<10240))
then
echo "(($SIZE/1000)) KB"
elif ((SIZE<102400))
then
echo "(($SIZE/10000)) MB"
elif ((SIZE<1024000))
then
echo "(($SIZE/100000)) GB"
elif ((SIZE<10240000))
then
echo "(($SIZE/1000000)) TB"
else
echo ""
fi
Řešení dotazu:
echo "$(( 1000 / 10 )) vs (( 1000 / 10 ))"
1024, to je 2^10, ale pak to najednou dělíte číslem 1000, což je 10^3. Asi tušíte, že využití místa se určuje častěji v násobcích 2^n, nikoliv v násobcích 10^n, ale nedotáhl jsem to do konce.
Dále pak předpona kilo označuje násobek 1000 resp. 1024, nikoliv násobek 10, což vám kupodivu nebrání za číslo 1024 záhadně přidávat vždy jednu nulu a porovnávat tak vlastně jen s násobkem deseti, a pak to dělíte opět jen tím tisícem, opět nesmyslně vynásobeným jen deseti.
Totéž pro mega, giga a tera.
Jeden kilobajt je 1024 bajtů, jeden megabajt je 1024 kilobajtů, tedy 1024 x 1024 bajtů etc.
Jednotky jako KiB ponechávám stranou, v tomto případě by to bylo jen jiné označení téhož.
... if [[ $SIZE < 1024 ]] ...
echo "$((SIZE/1000)) KB"
du -sh "$FILENAME"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.