Получить доступное дисковое пространство в ruby - PullRequest
23 голосов
/ 22 декабря 2010

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

Ответы [ 10 ]

33 голосов
/ 28 мая 2011

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

require 'sys/filesystem'

stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
7 голосов
/ 22 января 2011

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

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

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

4 голосов
/ 11 июня 2015

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

gb_available = stat.bytes_free / 1024 / 1024 / 1024

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

4 голосов
/ 16 ноября 2013

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

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

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

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

FreeDiskSpace.terabytes ('/')

FreeDiskSpace.gigabytes ('/')

FreeDiskSpace.megabytes ('/')

FreeDiskSpace.kilobytes ('/')

FreeDiskSpace.bytes ('/')

4 голосов
/ 04 января 2012

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

1 голос
/ 31 октября 2016

Это работает только в системе Linux: если вы не против вызвать оболочку, вы можете использовать df для файловой системы и проанализировать вывод с помощью регулярного выражения:

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)
1 голос
/ 23 июня 2016

Аналогично комментарию rogerdpack, чтобы получить свободное место в ГБ / МБ, вы можете попробовать выполнить следующее:

# 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 голос
/ 14 июля 2013
def check_disk_space
  system('df -H | grep debug > ff')
  ss = File.open('ff').read.split(/\s+/)
  system('rm ff')
  "#{ss[3]}"
end

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

0 голосов
/ 15 апреля 2019

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

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)
0 голосов
/ 12 января 2016

Решение без драгоценных камней, ответ в байтах:

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