27

使用 ruby​​ 获取磁盘空间信息的最佳方法是什么?我更喜欢纯红宝石解决方案。如果不可能(即使使用额外的 gem),它也可以使用标准 ubuntu 桌面安装中可用的任何命令将信息解析为 ruby​​。

4

10 回答 10

38

您可以使用sys-filesystem gem(跨平台友好)

require 'sys/filesystem'

stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
于 2011-05-28T11:44:54.383 回答
7

简单地说:

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

其中 '/dev/sda1' 是路径,只需运行 df 即可确定

于 2011-01-21T21:16:03.947 回答
5

(Ruby) Daniel Berger 在这个领域维护了很多宝石。在那里可以找到:sys-cpu、sys-uptime、sys-uname、sys-proctable、sys-host、sys-admin、sys-filesystem。它们是(AFAIK)多平台。

于 2012-01-04T01:23:19.577 回答
4

这是 dkams 答案的扩展,没有错,但计算了驱动器的完整空间,以检查剩余的可用空间。即驱动器替代 kdams secodn 行上的可用空间,如下所示:

gb_available = stat.bytes_free / 1024 / 1024 / 1024

这将在 Gigs 中返回驱动器上的剩余可用空间。

于 2015-06-11T11:40:01.563 回答
3

嗨,我为此创建了 gem:https ://github.com/pr0d1r2/free_disk_space

您可以通过以下方式使用它:

gem 'free_disk_space' # 添加行到 Gemfile

内部代码使用方法:

FreeDiskSpace.terabytes('/')

FreeDiskSpace.gigabytes('/')

FreeDiskSpace.megabytes('/')

FreeDiskSpace.kilobytes('/')

FreeDiskSpace.bytes('/')

于 2013-11-16T16:08:46.737 回答
1

类似于评论 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
于 2016-06-23T09:52:58.187 回答
1

这仅适用于 Linux 系统:如果您不介意调用 shell,您可以使用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)
于 2016-10-31T10:38:28.543 回答
0
def check_disk_space
  system('df -H | grep debug > ff')
  ss = File.open('ff').read.split(/\s+/)
  system('rm ff')
  "#{ss[3]}"
end

在 ubuntu 下使用,检查 debugs 大小,将可用大小作为输出。

于 2013-07-14T02:20:42.453 回答
0

我相信这是更强大的。

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)
于 2019-04-15T04:42:10.270 回答
-4

无宝石解决方案,以字节为单位回答:

(File.exists?('C:\\') ? `dir /-C`.match(/(\d+) bytes free/) : `df .`.match(/(\d+)\s*\d*%/)).captures[0].to_i
于 2016-01-12T06:45:24.477 回答