如何重命名文件夹中的特定文件为ruby

时间:2014-04-23 07:59:00

标签: ruby-on-rails ruby ruby-1.9.3 ruby-1.9

我有一个文件夹,请考虑其位置为/home/itsme/videos。文件夹包含许多文件(扩展名为.txt,.rb,.mp4等的文件)。

但是从这些文件中我只需要重命名 .mp4 文件。我想在不移动文件的情况下重新命名文件。如何使用 ruby​​ 实现此目的。

为此我使用ruby 1.9.3

5 个答案:

答案 0 :(得分:7)

这将是一招,我在这里使用FileUtils.mv方法。

path = "/home/itsme/videos"
Dir.open(path).each do |p|
  next if File.extname(p) != ".mp4"
  filename = File.basename(p, File.extname(p))
  newname = filename.upcase + File.extname(p)  
  FileUtils.mv("#{path}/#{p}", "#{path}/#{newname}")
end

要使用 FileUtils类方法,您必须使用require fileutils

来包含它

答案 1 :(得分:0)

请尝试这样:

path = "/home/itsme/videos"
Dir.open(path).each do |p|
 next if p.match(/^\./)
 old = path + "\\" + p
 new = path + "\\" + p.downcase.gsub(' ', '-')
 File.rename(old, new)
 puts old + " => " + new
end

答案 2 :(得分:0)

path = "/home/itsme/videos"
  Dir.open(path).each do |p|
  next if File.extname(p) != ".mp4"
  // Renaming happens here
  new = path + "\\" + p.downcase.gsub(' ', '-')
  File.rename(p, new)
end

与金斯顿的答案相同,但非常具体。 这将跳过任何不是M​​P4的内容,并使用新名称重命名mp4文件。 希望这会有所帮助。

答案 3 :(得分:0)

如果File#rename返回0表示重命名文件,则尝试此操作;如果无法重命名文件,则引发SystemCallErrorDir["./home/itsme/videos/*.mp4"]返回此mp4扩展程序的文件数组:

Dir["./home/itsme/videos/*.mp4"].each do |file|
  begin
  if File.rename(file, "new_filename").zero?
    puts "Change name #{file}"
  end
  rescue SystemCallError
    puts "Can't rename #{file}"
  end
end

答案 4 :(得分:0)

试试:

Dir.chdir("/home/itsme/videos") do
    unless Dir.glob("*.{mp4}").empty?
        Dir.glob("*.mp4", File::FNM_DOTMATCH).each_with_index do |file, index|
            File.rename(Dir.glob("*.mp4", File::FNM_DOTMATCH)[index],"some_other_name_#{index}.mp4")            
        end
    end
end

参考:http://www.ruby-doc.org/core-2.1.1/File.html#method-c-renamehttp://www.ruby-doc.org/core-2.1.1/Dir.html

希望这有效:)