Recursivamente obteniendo el tamaño de un directorio.

¿Hay una buena joya para obtener tamaños de directorio calculados recursivamente? En Unix, puedo usar du , pero quiero una biblioteca que absorba la diferencia entre el sistema operativo.

Parece que sys-filesystem maneja esto, pero tendrás que hacer algunos cálculos matemáticos para convertir los bloques disponibles en bytes (multiplicando por tamaño de bloque).

Esto parece funcionar:

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

¿Podría algo como esto trabajar para ti?

 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' 

Aquí está mi solución usando 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 

Compruebe la clase File::Stat (tenga en cuenta que no calcula el tamaño de los contenidos del directorio, debe hacerse manualmente).

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

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

Herramientas de apoyo:

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

Microsoft … CD de instalación del sistema

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

Utilidades de la Suite Sysinternals:

 du.exe -l 1 %windir% 

Microsoft …

Suite Sysinternals

    Intereting Posts