小编典典

可读格式的文件大小

linux

给定文件大小(以字节为单位),我想使用
IEC(二进制)前缀 将其格式化为 3个
有效数字,
并带有结尾的零
,例如1883954变为1.80M。

bash不支持浮点算术,因此我改用awk。问题是我不怎么保持尾随零。当前解决方案:

if [ $size -ge 1048576 ]
then
    size=$(awk 'BEGIN {printf "%.3g",'$size'/1048576}')M
elif [ $size -ge 1024 ]
then
    size=$(awk 'BEGIN {printf "%.3g",'$size'/1024}')K
fi

(文件不是那么大,所以我不必考虑更大的单位。)

编辑:这还有另一个问题。请参阅下面的AdrianFrühwirth的评论。


阅读 309

收藏
2020-06-07

共1个答案

小编典典

GNU
Coreutils
包含一个显然不为人所知的numfmt用于数字转换的小工具,它可以满足您的需求:

$ numfmt --to=iec-i --suffix=B --format="%.3f" 4953205820
4.614GiB

我认为这很适合您的需求,并且不如其他答案那么大。

如果您需要更强大的解决方案,请查看我的其他答案。

2020-06-07