2010-12-22 16 views
19

¿Cuál es la mejor manera de obtener información de espacio de disco con ruby? Preferiría una solución de rubí puro. Si no es posible (incluso con gemas adicionales), también podría usar cualquier comando disponible en una instalación de escritorio ubuntu estándar para analizar la información en ruby.Obtenga espacio de disco disponible en ruby ​​

+0

en Windows o Linux? , si Windows hay una Pregunta para ese http: // stackoverflow.com/questions/3258518/ruby-get-available-disk-drives –

+0

bajo ubuntu linux –

Respuesta

29

Se podría utilizar el sys-filesystem joya (multiplataforma amistoso)

require 'sys/filesystem' 

stat = Sys::Filesystem.stat("/") 
mb_available = stat.block_size * stat.blocks_available/1024/1024 
6

¿Qué hay de simplemente:

spaceMb_i = `df -m /dev/sda1`.split(/\b/)[24].to_i 

donde '/ dev/sda1' es el camino, determinado simplemente ejecutando df

+0

No funcionó para mí por alguna razón (¿la división?) pero esto hizo 'bytes_free = \' df -B1. \ '.split [10] .to_i' – rogerdpack

4

(Ruby) Daniel Berger mantiene a lot of gems en este campo. Se encuentra allí: sys-cpu, sys-uptime, sys-uname, sys-proctable, sys-host, sys-admin, sys-filesystem. Ellos son (AFAIK) multiplataforma.

1
def check_disk_space 
    system('df -H | grep debug > ff') 
    ss = File.open('ff').read.split(/\s+/) 
    system('rm ff') 
    "#{ss[3]}" 
end 

Usado bajo ubuntu, para comprobar depura tamaño, poner el tamaño disponible como salida.

2

Hola he creado joya para que: https://github.com/pr0d1r2/free_disk_space

Se puede utilizar por:

joya línea 'FREE_DISK_SPACE' # añadir a Gemfile

métodos de uso de código dentro:

FreeDiskSpace .terabytes ('/')

FreeDiskSpace.gigabytes ('/')

FreeDiskSpace.megabytes ('/')

FreeDiskSpace.kilobytes ('/')

FreeDiskSpace.bytes ('/')

+2

"Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas solo de enlace pueden dejar de ser válidas si la página vinculada cambia". – zero323

3

Esta es una extensión de dkams respuesta que no está mal, pero calculó el espacio completo de las unidades, para verificar si el resto puede usarse. el espacio libre de un sustituto unidad kdams línea secodn con lo siguiente:

mb_available = stat.bytes_free/1024/1024/1024 

Esto devolverá el espacio libre que queda en la unidad de conciertos.

+1

Si está en Gigs, ¿por qué llamarlo mb_available? – zachaysan

+0

@zachaysan que sería debido a cómo los parámetros son '1024/1024/1024' donde va de byte, megabyte, gigabyte. Que ver 'bytes_free' debería haber sido un regalo muerto. 'mb_available' se debe a que esta es la forma estándar de mostrar cualquier cantidad de datos a menos que, por supuesto, sea inferior a 1 mb. Aunque con los parámetros tienes el control de cómo lo quieres (KB, MB, GB). – DotSlashCoding

-2

una solución libre de la gema, la respuesta en bytes:

(File.exists?('C:\\') ? `dir /-C`.match(/(\d+) bytes free/) : `df .`.match(/(\d+)\s*\d*%/)).captures[0].to_i 
1

similares a comentar el comentario de rogerdpack para obtener el espacio libre en GB/MB es posible que trate de seguir

# Get free space in Gb in present partition 
gb_free = `df -BG .`.split[10].to_i** 

# Get free space in MB in /dev/sda1 partition 
mb_free = `df -BM /dev/sda1`.split[10].to_i** 
puts gb_free, mb_free 
1

Esto funciona sólo en un sistema Linux: Si no te importa llamando a la cáscara, se puede utilizar df para un sistema de archivos y analizar la salida con una expresión regular:

fs_to_check = '/boot' 
df_output = `df #{fs_to_check}` 
disk_line = df_output.split(/\n/)[1] 
disk_free_bytes = disk_line.match(/(.+)\s+(\d+)\s+(\d+)\s+(\d+)\s+/)[4].to_i 
disk_free_mbs = disk_free_bytes/1024 
puts(disk_free_mbs) 
Cuestiones relacionadas