用于查找特定文件并重命名的Ruby代码不起作用?

时间:2016-05-26 20:17:45

标签: ruby linux

我正在尝试使用Ruby在Linux机器上生成缩略图。

该过程包括确定已经生成的5个缩略图中哪一个是最有意义的(有意义的,在这里,我的意思是选择具有最大尺寸的缩略图,因为更大的尺寸意味着更多细节)。

之后我将具有最大尺寸的文件重命名为通用名称以便以后使用。代码似乎对我不起作用,我无法理解其中的原因,有什么建议可以改善吗?

提前谢谢。

这是我的代码:

根据您的可能需要,变量thumb_dir包含我们获取缩略图的目录的路径,来自。

max = File.size("#{thumb_dir}/thumb01.jpg").to_f #
name = "thumb01.jpg"

for i in 2..5
  if max < File.size("#{thumb_dir}/thumb0'"#{i}"'.jpg" ).to_f?
    max = File.size("#{thumb_dir}/thumb0'"{i}"'.jpg"
    name = "thumb0" + "#{i}" + ".jpg"
  end
end

File.rename("#{thumb_dir}/#{name}", "thumbnail.jpg") `

2 个答案:

答案 0 :(得分:1)

-gravity center

它做了什么?

  1. i = (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }.each_with_index.max[1] File.rename("#{thumb_dir}/thumb#{i + 1}.jpg", "thumbnail.jpg")
  2. 我们获得了thumb1.jpg的文件大小数组,最高可达thumb5.jpg

    1. (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }
    2. 用于获取数组最大值的索引。

      1. array.each_with_index.max[1]
      2. 现在我们知道i是数组中最大值的索引,那么File.rename("#{thumb_dir}/thumb#{i+1}.jpg", "thumbnail.jpg")是具有最大大小的文件,因此我们想要替换名称。

答案 1 :(得分:0)

请记住,在Ruby中,Enumerable中有许多有用的方法可以使这类事情变得非常简单:

# Expand to a list of possible thumbnail paths
thumbnails = (2..5).map { |n| '%s/thumb%02d.jpg' % [ thumb_dir, n ] }

# Find the biggest thumbnail by...
biggest_thumbnail = thumbnails.select do |path|
  # ...only dealing with those files that exist...
  File.exist?(path)
end.max_by do |path|
  # ...and looking for the one with the maximum size.
  File.size(path)
end

如果存在最大文件,则应返回最大文件。如果没有,你会得到nil

您可以使用它来重命名:

if (biggest_thumbnail)
  File.rename(biggest_thumbnail, 'thumbnail.jpg')
end

您需要备份原始图像,然后才能释放出可能会删除大量文件的内容。