总结目录的总文件大小有很大的不同:Ruby-e,du-ach,ls-al"total"

ls | ruby -ne 'BEGIN{a= []}; a <<  File.size($_.chomp).to_i; END{puts a.sum}'

上面的代码获取每个文件的文件大小,将其放入一个数组中,并打印总和。

返回的值与:

du -ach

并且这两个值与通过以下方式显示的总计非常不同:

ls -al

没有隐藏文件。

苹果系统

回答

如果du向您展示了大量 4K 和 8K 文件,这是因为它向您展示了块大小。为了性能,磁盘上的存储由块组成。如今,典型的块是 4K。即使是单个字节也会占用一个完整的块。

$ echo '1' > this

$ hexdump this
0000000 31 0a                                          
0000002

$ ls -l this
-rw-r--r-- 1 schwern staff 2 Dec  5 15:16 this

$ du -h this
4.0K    this

$ du --apparent-size -h this
2   this

$ ruby -e 'puts File.size(ARGV[0])' this
2

有问题的文件有 2 个字节的内容。ls -lFile.size报告两个字节的内容。

du,默认情况下,报告文件的块大小。这是因为它是一个磁盘使用情况工具,您想知道实际占用的磁盘数量。这 2 个字节占用了 4K 的磁盘空间。1000 个 2 字节文件将占用 4000K,而不是 2000 字节。

出于这个原因,许多程序会避免有很多小文件,而是通过将它们打包成一个图像文件来节省磁盘空间。一个简单的例子是Git packfiles。


以上是总结目录的总文件大小有很大的不同:Ruby-e,du-ach,ls-al"total"的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>