如何在Ruby中编写重命名模式?

时间:2015-07-29 20:04:55

标签: ruby gsub

我有几个这种类型的文件:

File-1 (vip)-eojUBB_8V_4.mp4
File-2 (vip)-Ek2iyeeL1Vc.mp4
File-3 (vip)-Gh8F6OJa0gU.mp4
File-4 (vip)-SvL_aZt3zyU.mp4

并想将文件重命名为:

File-1.mp4 
File-2.mp4

名称“File1”和“File2”只是一个例子。实际上文件有不同的名称,但在文件名末尾有“(vip)-smthing.mp4”。

我写了剧本:

#!/usr/bin/env ruby
require 'fileutils'
list = %x(ls -1 | grep .mp4).split(",")
list.each do |i|
  File.rename(i, i.gsub(/(vip)*.mp4/, ".mp4"))
end

但无法理解,我需要在gsub中编写什么模式。

Bash示例工作没问题,但我需要在Ruby上编写它。

ls -1 | sed 's/-[^-]\+\././'

2 个答案:

答案 0 :(得分:1)

#!/usr/bin/env ruby
require 'fileutils'
list = Dir.glob('*.mp4')
list.each do |src|
  if src =~ /^(File\d+)/
    dst = "#{$1}.mp4"
    puts "renaming '#{src}' to '#{dst}'"
    File.rename(src, dst)
  end
end

输出:

$ ls
File1 (vip)-dHsq8aF2P0U.mp4 File2 (vip)-asdfsad.mp4     foo.rb

$ ruby foo.rb
renaming 'File1 (vip)-dHsq8aF2P0U.mp4' to 'File1.mp4'
renaming 'File2 (vip)-asdfsad.mp4' to 'File2.mp4'

$ ls
File1.mp4   File2.mp4   foo.rb

答案 1 :(得分:0)

答案是:

#!/usr/bin/env ruby
require 'fileutils'
list = %x(ls -1 | grep .mp4).split(",")
list.each do |i|
  puts i.gsub(/ \(vip\)-\S+\./, ".")
end

感谢Philip Hallstrom和http://rubular.com/