ls -lh`如何取整文件大小?

问题描述 投票:3回答:2

我正在将ls -lh显示的舍入后的文件大小值与原始大小(以字节为单位)进行比较(例如ls -l显示的大小)。我很难弄清楚它使用什么算法从字节转换。

我的假设是,它将单位K,M,G解释为任一

  • (a)10 ^ 3、10 ^ 6、10 ^ 9或
  • (b)1024、1024 ^ 2、1024 ^ 3。

一方面,我有一个文件,ls -l报告为2052字节,ls -lh舍入为2.1K:

$ ls -l usercount.c 
-rw-r--r-- 1 squirrel lsf 2052 May 13 15:41 usercount.c
$ ls -lh usercount.c 
-rw-r--r-- 1 squirrel lsf 2.1K May 13 15:41 usercount.c

这似乎支持假设(a),因为2052/1000 = 2.052会四舍五入为2.1K,而2052/1024 = 2.0039会四舍五入到小数点后显然会显示为2.0K。

另一方面,我有另一个文件,ls -l报告为7223字节,ls -lh显示为7.1K:

$ ls -l traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7223 Jul 21  2014 traverse.readdir_r.c
$ ls -lh traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7.1K Jul 21  2014 traverse.readdir_r.c

这令人困惑地支持假设(b),因为7223/1000 = 7.223可以四舍五入为7.2K,但是7223/1024 = 7.0537可以四舍五入为所显示的7.1K]

这使我得出结论,我的假设是错误的,并且它既不做(a)也不做(b)。 ls使用什么算法进行舍入?

linux unix ls
2个回答
5
投票

GNU ls默认情况下将以基于[[1024的单位向上取整

根据您的理所当然,它不会四舍五入。

这是gnulib human.h中的格式标记:

/* Round to plus infinity (default). */ human_ceiling = 0,

这与您所看到的一切一致:

    2052是2.0039 KiB,四舍五入为2.1
  • 7223是7.0537 KiB,四舍五入为7.1

1
投票
默认情况下,以ls为单位的块大小为1024,但是例如,如果输出为44.203125k,它将四舍五入为45k您也可以更改它

ls -lh --block-size=1000

和源代码:ls source code
© www.soinside.com 2019 - 2024. All rights reserved.