递归获取目录的大小
看起来像sys-filesystem可以处理这个问题,但是您需要做一些数学运算来将可用块转换为字节(通过乘以块大小)。
这可能是由于自从很长一段时间以来这个答案,但mentio ned gem正确地确定了块的大小(也是以字节为单位的大小)。 'bytes_ {used,total,free}'只在文件系统(= mount)级别上,似乎不能确定目录的大小。 – oliverguenther 2015-07-20 14:06:43
查看File::Stat
类(请注意,它不计算目录内容的大小,它需要手动完成)。
file = File::Stat.new('.')
puts file.size
我假设你是downvoted,因为它返回目录的大小,但不是目录内容的组合大小。 – d11wtq 2012-02-20 05:55:03
啊,当然。这是一个令人失望的警告。 – fullsailor 2012-02-20 06:48:01
支持工具:
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 Suite工具:
du.exe -l 1 %windir%
微软...
目前还不清楚如何解决这个问题。 YOu需要解释 – 2016-03-03 23:12:57
莫非这样的事情对你的工作?
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
这似乎工作:
Dir.glob(File.join(dir, '**', '*'))
.map{ |f| File.size(f) }
.inject(:+)
我想你实际上只是用'(&:size)'来获取字符串的长度。你想要的是'{| file | File.size(file)}'。 – 2017-06-24 08:25:34
@RyanLue你说得对,我确定了我的答案。 – yegor256 2017-06-25 12:16:01
相关:http://*.com/questions/3632074/what-is-the -fastest-way-to-calculate-disk-usage-per-customer – coreyward 2012-02-20 00:03:22
相关:http://*.com/questions/4508692/get-available-diskspace-in-ruby – coreyward 2012-02-20 00:06:19