我有一个文件夹,请考虑其位置为/home/itsme/videos
。文件夹包含许多文件(扩展名为.txt,.rb,.mp4等的文件)。
但是从这些文件中我只需要重命名 .mp4 文件。我想在不移动文件的情况下重新命名文件。如何使用 ruby 实现此目的。
为此我使用ruby 1.9.3
答案 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
与金斯顿的答案相同,但非常具体。 这将跳过任何不是MP4的内容,并使用新名称重命名mp4文件。 希望这会有所帮助。
答案 3 :(得分:0)
如果File#rename返回0表示重命名文件,则尝试此操作;如果无法重命名文件,则引发SystemCallError
。 Dir["./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-rename,http://www.ruby-doc.org/core-2.1.1/Dir.html
希望这有效:)