递归获取目录的大小

时间:2012-02-19 23:59:52

标签: ruby directory filesize

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

6 个答案:

答案 0 :(得分:4)

这似乎有效:

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

答案 1 :(得分:2)

这样的事情能为你效劳吗?

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'

答案 2 :(得分:2)

以下是使用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

答案 3 :(得分:1)

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

答案 4 :(得分:-1)

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

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

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

答案 5 :(得分:-2)

支持工具:

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 Suite Utilities:

du.exe -l 1 %windir%

微软......

Sysinternals Suite