Ответ 1
Вы можете использовать sys-filesystem gem (кросс-платформенная)
require 'sys/filesystem'
stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
Каков наилучший способ получить информацию о дисках с ruby. Я бы предпочел чисто рубиновый раствор. Если это невозможно (даже с дополнительными драгоценными камнями), он также может использовать любую команду, доступную в стандартной установке рабочего стола ubuntu, для анализа информации в рубине.
Вы можете использовать sys-filesystem gem (кросс-платформенная)
require 'sys/filesystem'
stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
Как насчет просто:
spaceMb_i = `df -m /dev/sda1`.split(/\b/)[24].to_i
где '/dev/sda1' - это путь, определяемый простым запуском df
(Ruby) Daniel Berger поддерживает много драгоценных камней в этой области. Здесь можно найти: sys-cpu, sys-uptime, sys-uname, sys-proctable, sys-host, sys-admin, sys-filesystem. Они (мульти-платформа AFAIK).
Привет, я создал камень для этого: https://github.com/pr0d1r2/free_disk_space
gem 'free_disk_space' # добавить строку в Gemfile
FreeDiskSpace.terabytes( '/')
FreeDiskSpace.gigabytes( '/')
FreeDiskSpace.megabytes( '/')
FreeDiskSpace.kilobytes( '/')
FreeDiskSpace.bytes( '/')
Это расширение ответа dkams, которое не является неправильным, но рассчитывает полное пространство одного диска, чтобы проверить оставшееся пригодное для использования. То есть БЕСПЛАТНОЕ место на диске заменяет строку kdams secodn следующим образом:
gb_available = stat.bytes_free / 1024 / 1024 / 1024
Это вернет оставшееся свободное место на вашем диске в концертах.
def check_disk_space
system('df -H | grep debug > ff')
ss = File.open('ff').read.split(/\s+/)
system('rm ff')
"#{ss[3]}"
end
Используемый под ubuntu, чтобы проверить размер отладок, поместите доступный размер в качестве вывода.
Как комментарий комментарий rogerdpack чтобы получить свободное пространство в GB/MB, вы можете попробовать следовать
# 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
Это работает только в системе Linux: если вы не против вызова оболочки, вы можете использовать df
для файловой системы и проанализировать вывод с помощью Regexp:
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)
Я считаю, что это более надежно.
filesystem = "/dev/sda1"
free_megabytes = 'LANG=C df -m #{filesystem}'.split("\n").map do |line|
line.split.first(4)
end.transpose.to_h["Available"]&.to_i
puts(free_megabytes)
Бесплатное решение без камней, ответ в байтах:
(File.exists?('C:\\') ? `dir /-C`.match(/(\d+) bytes free/) : `df .`.match(/(\d+)\s*\d*%/)).captures[0].to_i