Подтвердить что ты не робот

Получить доступное дисковое пространство в рубине

Каков наилучший способ получить информацию о дисках с ruby. Я бы предпочел чисто рубиновый раствор. Если это невозможно (даже с дополнительными драгоценными камнями), он также может использовать любую команду, доступную в стандартной установке рабочего стола ubuntu, для анализа информации в рубине.

4b9b3361

Ответ 1

Вы можете использовать sys-filesystem gem (кросс-платформенная)

require 'sys/filesystem'

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

Ответ 2

Как насчет просто:

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

где '/dev/sda1' - это путь, определяемый простым запуском df

Ответ 3

(Ruby) Daniel Berger поддерживает много драгоценных камней в этой области. Здесь можно найти: sys-cpu, sys-uptime, sys-uname, sys-proctable, sys-host, sys-admin, sys-filesystem. Они (мульти-платформа AFAIK).

Ответ 4

Привет, я создал камень для этого: https://github.com/pr0d1r2/free_disk_space

Вы можете использовать его:

gem 'free_disk_space' # добавить строку в Gemfile

Использование методов внутреннего кода:

FreeDiskSpace.terabytes( '/')

FreeDiskSpace.gigabytes( '/')

FreeDiskSpace.megabytes( '/')

FreeDiskSpace.kilobytes( '/')

FreeDiskSpace.bytes( '/')

Ответ 5

Это расширение ответа dkams, которое не является неправильным, но рассчитывает полное пространство одного диска, чтобы проверить оставшееся пригодное для использования. То есть БЕСПЛАТНОЕ место на диске заменяет строку kdams secodn следующим образом:

gb_available = stat.bytes_free / 1024 / 1024 / 1024

Это вернет оставшееся свободное место на вашем диске в концертах.

Ответ 6

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

Используемый под ubuntu, чтобы проверить размер отладок, поместите доступный размер в качестве вывода.

Ответ 7

Как комментарий комментарий 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

Ответ 8

Это работает только в системе 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)

Ответ 9

Я считаю, что это более надежно.

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)

Ответ 10

Бесплатное решение без камней, ответ в байтах:

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