du -bs /folder
结果是96342835字节…所以MB是(/ 1024/1024)91,87MB.
好的,但是当我使用的时候
du -hs /folder
结果不同. 99MB
要么
du -s taxikondrat.cz/
100980 KBytes = 98,61MB
我尝试了不同的方法.在每一个我得到不同的结果.例如.
find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
我得到96059200字节,所以91,60MB
ls -ARgo "$@" | awk '{q += $3} END {print q}'
96338739字节,87 MB.舍入后相同,但在字节上差别不大.
那么,这是真的吗?为什么会出现这种差异,哪种方法最准确?
解决方法
请注意,ls -s将根据文件中实际数据的长度给出文件的大小.
默认情况下,du命令将提供基于大小的磁盘使用情况.由于磁盘空间是以块的形式分配的,并且文件的长度几乎不是块大小的整数倍,因此最终会得到一个仅部分填充数据但不能被其他文件使用的块.
换句话说,如果文件系统的块大小为512字节,则1字节长度的文件将占用磁盘上的512字节,与511字节的文件相同.一个513字节的文件将占用2个块和1024个字节的磁盘空间.
总和du文件磁盘使用率几乎总是大于ls -s文件文件大小的总和,特别是当你有许多(小)文件和/或非常大的块大小时.
使用du -b开关不会计算块,但行为类似于ls -s:
-b
equivalent to--apparent-size --block-size=1
--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 frag‐
mentation,indirect blocks,and the like
-h,--human-readable
print sizes in human readable format (e.g.,1K 234M 2G)
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/
编辑关于转换为人类可读输出和兆字节,请不要忽视SI十进制前缀与二进制倍数的人类可读的整体“争议”,1000的幂与1024的幂.
有关GNU实用程序(如ls和du)如何显示它们的信息,请参阅本页的背景信息:https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html.
du -h输出中的大写字母M代表1,048,576字节.