使用 ruby 获取磁盘空间信息的最佳方法是什么?我更喜欢纯红宝石解决方案。如果不可能(即使使用额外的 gem),它也可以使用标准 ubuntu 桌面安装中可用的任何命令将信息解析为 ruby。
10 回答
您可以使用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)多平台。
这是 dkams 答案的扩展,没有错,但计算了驱动器的完整空间,以检查剩余的可用空间。即驱动器替代 kdams secodn 行上的可用空间,如下所示:
gb_available = stat.bytes_free / 1024 / 1024 / 1024
这将在 Gigs 中返回驱动器上的剩余可用空间。
嗨,我为此创建了 gem:https ://github.com/pr0d1r2/free_disk_space
您可以通过以下方式使用它:
gem 'free_disk_space' # 添加行到 Gemfile
内部代码使用方法:
FreeDiskSpace.terabytes('/')
FreeDiskSpace.gigabytes('/')
FreeDiskSpace.megabytes('/')
FreeDiskSpace.kilobytes('/')
FreeDiskSpace.bytes('/')
类似于评论 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 系统:如果您不介意调用 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)
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 大小,将可用大小作为输出。
我相信这是更强大的。
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