我的这两个用于计算目录中平均文件大小的Bash管道方法有什么问题?

时间:2016-02-20 00:02:50

标签: bash unix terminal pipeline

问题:我正在尝试使用单行计算我所在目录(忽略子目录)的平均文件大小。我有两种方法:

item.Style.Add("display", "none");

ls -l | gawk '{sum += $5; n++;} END {print sum/n;}'

它们似乎产生相似的数字,虽然不同的单位(第一个以kB为单位,第二个以MB为单位)。

然而,这些数字本身有些错误。这是怎么回事?哪一个更正确?

1 个答案:

答案 0 :(得分:3)

duls报告的方式不同。考虑du手册页的这一部分:

   --apparent-size
          print apparent sizes,  rather  than  disk  usage;  although  the
          apparent  size is usually smaller, it may be larger due to holes
          in ('sparse') files, internal  fragmentation,  indirect  blocks,
          and the like

这可以了解ls显示的内容(表观大小)与du显示的内容之间可能存在的差异(默认情况下,实际磁盘使用情况)。

$ truncate -s 10737418240 sparse
$ ls -l sparse
-rw-rw-r-- 1 ec2-user ec2-user 10737418240 Feb 20 00:19 sparse
$ du sparse
0       sparse
$ ls -ls sparse
0 -rw-rw-r-- 1 ec2-user ec2-user 10737418240 Feb 20 00:19 sparse

以上显示了稀疏文件的报告差异。

此外,使用ls -l计算文件将包括子目录,符号链接等。您可以使用find仅显示文件:

find . -maxdepth 1 -type f