获取ruby中的可用磁盘空间

获取ruby中的可用磁盘空间,ruby,diskspace,Ruby,Diskspace,使用ruby获取磁盘空间信息的最佳方法是什么。 我更喜欢纯ruby解决方案。如果不可能(即使有额外的gems),它也可以使用标准ubuntu桌面安装中可用的任何命令将信息解析为ruby。简单地说: spaceMb_i = `df -m /dev/sda1`.split(/\b/)[24].to_i 其中“/dev/sda1”是路径,只需运行df即可确定,您可以使用gem(跨平台友好型) (Ruby)Daniel Berger在这个领域保持着领先地位。可以在那里找到:sys cpu、sys正常运

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

简单地说:

spaceMb_i = `df -m /dev/sda1`.split(/\b/)[24].to_i
其中“/dev/sda1”是路径,只需运行df即可确定,您可以使用gem(跨平台友好型)

(Ruby)Daniel Berger在这个领域保持着领先地位。可以在那里找到:sys cpu、sys正常运行时间、sys uname、sys proctable、sys主机、sys管理员、sys文件系统。它们是多平台的

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

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

嗨,我已经为此创建了gem:

您可以通过以下方式使用它: gem“空闲磁盘空间”#将行添加到Gemfile

内部代码使用方法: FreeDiskSpace.TB(“/”)

FreeDiskSpace.gigabytes(“/”)

FreeDiskSpace.MB(“/”)

FreeDiskSpace.KB(“/”)


FreeDiskSpace.bytes(“/”)

这是对dkams答案的扩展,它没有错,但计算了一个驱动器的完整空间,以检查剩余的可用空间。驱动器上的可用空间将kdams secodn行替换为以下内容:

gb_available = stat.bytes_free / 1024 / 1024 / 1024

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

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

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

类似于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
,并使用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)

我相信这是更有力的

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)

在windows或linux下,如果windows有这样一个问题,“虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面更改,只有链接的答案可能会无效。”出于某种原因(拆分?)对我不起作用,但这确实是
bytes\u free=`df-B1.`split[10].to_i
有没有办法在不使用任何gem的情况下获得ruby for Linux和Windows根磁盘的总剩余大小?如果它是Gigs,那么为什么称它为mb_可用?@zachaysan这将是因为参数
1024/1024/1024
从字节、兆字节、千兆字节开始。那些免费的
bytes\u
本应该是一个彻底的赠品<代码>mb_可用是因为这是显示任何数据量的标准方式,当然,除非数据量低于1MB。虽然使用参数可以控制所需的大小(KB、MB、GB)。@DotSlashCoding If
bytes\u free
返回字节(它是这样做的),然后我们将其除以1024三次,得到:bytes->kilobytes->megabytes->gigabytes。因此@zachaysan的问题是,为什么变量名为
mb\u available
,而不是更精确的
gb\u available
@aidan,我现在不明白gb如何比更小更精确的值更精确?他所做的只是将mb_分配给总字节/(除以)1024以获得可用的Gig。最初的问题/答案与GB无关,idk为什么这个问题/答案与GB无关<代码>千字节(KB)1024字节兆字节(MB)1024千字节以字节开始:
1024字节;1024千字节;1024兆字节
,其中生成的值将小于向上移动到1024千兆字节值所需的值。嗨,伙计们,是的,我弄错了,谢谢,var应该称为gb\U可用。双星号是什么(
**
)关于?有没有办法在不使用任何gem的情况下获得ruby for Linux和Windows中根磁盘的总剩余大小?有没有办法在不使用任何gem的情况下获得ruby for Linux和Windows中根磁盘的总剩余大小?
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)