以兆字节显示文件夹使用情况的正确方法是什么

Pav*_*vel 6 linux du

我正在使用du -bs来计算文件夹大小。

du -bs /folder
Run Code Online (Sandbox Code Playgroud)

结果是以字节为单位的96342835 ...所以以 MB 为单位是 (/1024/1024) 91,87MB

好的,但是当我使用

du -hs /folder
Run Code Online (Sandbox Code Playgroud)

结果不一样。99MB

 du -s taxikondrat.cz/
Run Code Online (Sandbox Code Playgroud)

100980 KB = 98,61MB

我尝试了不同的方法。每一次我都得到了不同的结果。例如

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
Run Code Online (Sandbox Code Playgroud)

我有 96059200 字节,所以91,60MB

ls -ARgo "$@" | awk '{q += $3} END {print q}'
Run Code Online (Sandbox Code Playgroud)

96338739 字节,所以91,87 MB。舍入后相同,但以字节为单位略有不同。

作为蛋糕上的樱桃是谷歌:) 在此处输入图片说明

那么,什么是真的?为什么会有这种差异,什么方法是最准确的计数?

HBr*_*ijn 11

你在比较苹果和橙子。

请注意,ls -s将根据文件中实际数据的长度给出文件的大小。

默认情况下,该du命令将给出基于大小的磁盘使用情况。由于磁盘空间是按块分配的,并且文件的长度几乎不是块大小的整数倍,因此您最终会得到一个仅部分填充数据但不能被另一个文件使用的块。
换句话说,如果您的文件系统的块大小为 512 字节,则 1 字节长度的文件将在磁盘上占用 512 字节,与 511 字节的文件相同。一个 513 字节的文件将占用 2 个块和 1024 字节的磁盘空间。

du file磁盘使用量几乎总是大于ls -s file文件大小的总和,尤其是当您有很多(小)文件和/或非常大的块大小时。

使用du -bswitch 不会计算块,但行为如下ls -s

-b 相当于 打印外观尺寸,而不是磁盘使用量;尽管表观大小通常较小,但由于(“稀疏”)文件中的漏洞,内部碎片可能会更大?心理、间接块等 以人类可读格式(例如,1K 234M 2G)的打印尺寸--apparent-size --block-size=1
--apparent-size
-h, --human-readable

du -sh将块的总数转换为人类可读的格式,
du -bh将以人类可读的格式打印表观大小的总和。

在我的 Maildir 中,有许多不同的小文件:

$ du -bs cur/
84088436    cur/
$ du -s cur/
91800   cur/
$ du -sh cur/
90M cur/
$ du -bh cur/
81M cur/
Run Code Online (Sandbox Code Playgroud)

编辑关于转换为人类可读的输出和兆字节,请不要忽视人类可读的 SI 十进制前缀与二进制倍数、1000 次幂与 1024 次幂的整个“争议”

请参阅背景此页:https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html在GNU如何实用程序,如lsdu显示。

资本Mdu -h输出代表1,048,576字节。

  • 这只是冰山一角(但已经足够复杂了)。还有一些奇特的东西,比如文件系统,其中文件的“尾部”(即最后几个字节太小而无法填充整个块)可以共享一个块。(例如 Reiserfs。)在这种情况下,尾块可能会针对每个文件多次计数,并且如何在块中定义单个文件的大小是不明显的。然后,存在稀疏文件,其中文件的内容大于其在磁盘上的表示。支持压缩的文件系统也是如此。在具有重复数据删除功能的文件系统上,... (3认同)
  • ... 块可能是多个文件的一部分;再次,在这种情况下,您如何明智地定义“块大小”? (3认同)