sea*_*mus 0 ruby terminal ls filesize du
ls | ruby -ne 'BEGIN{a= []}; a << File.size($_.chomp).to_i; END{puts a.sum}'
Run Code Online (Sandbox Code Playgroud)
上面的代码获取每个文件的文件大小,将其放入一个数组中,并打印总和。
返回的值与:
du -ach
Run Code Online (Sandbox Code Playgroud)
并且这两个值与通过以下方式显示的总计非常不同:
ls -al
Run Code Online (Sandbox Code Playgroud)
没有隐藏文件。
苹果系统
如果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
Run Code Online (Sandbox Code Playgroud)
有问题的文件有 2 个字节的内容。ls -l和File.size报告两个字节的内容。
du,默认情况下,报告文件的块大小。这是因为它是一个磁盘使用情况工具,您想知道实际占用的磁盘数量。这 2 个字节占用了 4K 的磁盘空间。1000 个 2 字节文件将占用 4000K,而不是 2000 字节。
出于这个原因,许多程序会避免有很多小文件,而是通过将它们打包成一个图像文件来节省磁盘空间。一个简单的例子是Git packfiles。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |