如何在Ruby中获取目录中文件的总大小

时间:2019-04-17 03:39:26

标签: ruby-on-rails ruby

我正在尝试使用Ruby将某些文件复制到目录中,我需要确保目录中的文件不超过2GB。有什么方法可以检查目录中文件的总大小。

3 个答案:

答案 0 :(得分:2)

mydir

Dir['mydir/*'].select { |f| File.file?(f) }.sum { |f| File.size(f) }

mydir和所有子目录:

Dir['mydir/**/*'].select { |f| File.file?(f) }.sum { |f| File.size(f) }

但是,它是确切文件大小的总和,而不是它们在磁盘上占据的空间。对于磁盘使用情况,这更准确:

Dir['mydir/*'].select { |f| File.file?(f) }.sum { |f| File.stat(f).blocks * 512 }

答案 1 :(得分:1)

对于Unix风格的OS,最简单的方法是使用du命令将其安装到操作系统中。

例如

du -bs #=> 1214674782

是计算机当前目录及其嵌套子目录占用的磁盘空间(以字节为单位)。

du ../.rvm/src -bs #=> 722526755

对于指定目录是相同的。在Ruby中,您可以使用Kernel#system命令:

s = system("du -bs") #=> 1214674782

要仅获取当前目录(而不是嵌套子目录)消耗的字节,请从标志中删除"b"

s = system("du -s") #=> 1301136

请注意,磁盘空间消耗比所有文件大小的总和还多,但这可以更好地衡量所需的内容。

答案 2 :(得分:0)

在Windows中,您可以使用win32ole gem进行计算

 require 'win32ole'

 fso = WIN32OLE.new('Scripting.FileSystemObject')

 folder = fso.GetFolder('directory path')

  p folder.name

  p folder.size

 p folder.path