递归获取目录的大小

获取递归计算的目录大小是否有一个很好的gem? 在unix中,我可以使用du ,但我想要一个能够吸收OS之间差异的库。

貌似sys-filesystem处理这个问题,但你需要做一些数学运算来将可用的块转换成字节(通过乘以块大小)。

这似乎有效:

 Dir.glob(File.join(dir, '**', '*')) .map{ |f| File.size(f) } .inject(:+) 

这样的事能适合你吗?

 def directory_size(path) path << '/' unless path.end_with?('/') raise RuntimeError, "#{path} is not a directory" unless File.directory?(path) total_size = 0 Dir["#{path}**/*"].each do |f| total_size += File.size(f) if File.file?(f) && File.size?(f) end total_size end puts directory_size '/etc' 

这是我使用http://ruby-doc.org/core-2.2.0/File.html#method-c-size的解决方案:

 def directory_size(path) size=0 Dir.glob(File.join(path, '**', '*')) { |file| size+=File.size(file) } size end 

查看File::Stat类(请注意,它不计算目录内容的大小,需要手动完成)。

 file = File::Stat.new('.') puts file.size 

http://ruby-doc.org/core-1.9.3/File/Stat.html#method-i-size

支持工具:

 diruse /M %windir% diruse /K /S %windir% diruse /S %windir% diruse /, %windir% 

Microsoft …系统安装CD

 msiexec /i %cd:~0,2%\SUPPORT\TOOLS\SUPTOOLS.MSI /q addlocal=all 

Sysinternals套房公用事业:

 du.exe -l 1 %windir% 

微软……

Sysinternals套房