繁体   English   中英

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

[英]How to get the total size of files in a Directory in Ruby

我试图使用Ruby将一些文件复制到一个目录中,我需要确保目录中的文件不超过2GB。 有没有办法检查目录中的文件总大小。

只是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 }

对于Unix风格的操作系统,简单地向操作系统发出外壳以使用du命令可能是最容易的。

例如

du -bs #=> 1214674782

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

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

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

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

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

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

注意磁盘空间消耗略高于所有文件大小的总和,但这可能更好地衡量您要查找的内容。

在Windows中,您可以使用win32ole gem来计算相同的内容

 require 'win32ole'

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

 folder = fso.GetFolder('directory path')

  p folder.name

  p folder.size

 p folder.path

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM