获取ruby中的可用磁盘空间

问题描述 投票:23回答:10

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

ruby diskspace
10个回答
33
投票

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

require 'sys/filesystem'

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

-3
投票

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

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

7
投票

怎么样简单:

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

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


4
投票

(Ruby)Daniel Berger在这个领域维护着a lot of gems。在那里找到:sys-cpu,sys-uptime,sys-uname,sys-proctable,sys-host,sys-admin,sys-filesystem。他们是(AFAIK)多平台。


4
投票

嗨,我为此创造了宝石:https://github.com/pr0d1r2/free_disk_space

You can use it by:

gem'free_disk_space'#添加到Gemfile的行

Inside code use methods:

FreeDiskSpace.terabytes( '/')

FreeDiskSpace.gigabytes( '/')

FreeDiskSpace.megabytes( '/')

FreeDiskSpace.kilobytes( '/')

FreeDiskSpace.bytes( '/')


4
投票

这是对dkams回答的扩展,这是没有错的,但计算了一个驱动器的完整空间,以检查剩余的可用.i.e。驱动器上的免费空间用以下代码替换kdams secodn行:

gb_available = stat.bytes_free / 1024 / 1024 / 1024

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


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

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


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

1
投票

这仅适用于Linux系统:如果您不介意调用shell,可以将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)

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)
© www.soinside.com 2019 - 2024. All rights reserved.