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