Portál AbcLinuxu, 15. května 2025 21:55
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.