递归获取目录的大小
获取递归计算的目录大小是否有一个很好的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
支持工具:
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套房