0

我有一个备份脚本,我将所有对象放在一个目录中,然后用每 30,000 个切片将它们备份到 S3。现在我的问题是我有超过 100,000 个对象,我想跳到第 2 片,但我不确定该怎么做。所以循环的开始看起来像 -

directory.files.each_slice(30000) do |file_array|

directory.files.each_slice(30000).skip(1) 

有什么想法吗?

谢谢!

4

3 回答 3

2

each_slice返回一个可枚举的,然后您可以在其上调用更多可枚举的方法,因此您可以使用它with_index来执行类似的操作

directory.files.each_slice(30000).with_index { | file_array, i | 
    next if i == 2 
    upload file_array 
}
于 2012-11-26T19:43:06.990 回答
1

您的假设skip方法称为drop

directory.files.each_slice(30000).drop(1).each do |file_array|

请注意,与所有 Enumerable方法一样,它不是类型保留的,它总是返回 an Array,即使您在 an 上调用它也是如此Enumerator。因为你现在只有大约 4 片,所以这不是问题,但如果你有数百万片,那会很快耗尽你的记忆。

于 2012-11-26T19:49:10.293 回答
0

这个怎么样:

directory.files.each_slice(30000).with_index do |files, idx| 
  next if idx == 0
  ...
end
于 2012-11-26T19:48:27.977 回答