有没有一个好用的gem用于递归计算目录大小?在Unix中,我可以使用du
,但我想要一个能够吸收不同操作系统差异的库。
Dir.glob(File.join(dir, '**', '*'))
.map{ |f| File.size(f) }
.inject(:+)
(&:size)
获取字符串的长度。相反,你想要的是 { |file| File.size(file) }
。 - Ryan Luesum
代替 inject(:+)
(在 Ruby 2.6.4 上测试过)。 - builder-7000这是我使用 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
这种方案是否适合您?
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'
看起来 sys-filesystem 可以处理这个问题,但你需要做一些数学计算将可用的块转换成字节(通过乘以块大小)。
bytes_{used,total,free}
),仅适用于文件系统(= 挂载)级别,并且似乎无法确定目录的大小。 - oliverguentherFile::Stat
类(请注意,它不会计算目录内容的大小,需要手动完成)。file = File::Stat.new('.')
puts file.size
支持工具:
diruse /M %windir%
diruse /K /S %windir%
diruse /S %windir%
diruse /, %windir%
微软...系统安装光盘
msiexec /i %cd:~0,2%\SUPPORT\TOOLS\SUPTOOLS.MSI /q addlocal=all
Sysinternals套件工具:
du.exe -l 1 %windir%
微软...