使用ruby更改文件扩展名

Boo*_*oon 10 ruby rubygems ruby-on-rails

我有一个远程文件夹中的.eml文件列表

\\abcremote\pickup
Run Code Online (Sandbox Code Playgroud)

我想重命名所有文件

xyz.eml to xyz.html
Run Code Online (Sandbox Code Playgroud)

你能帮助我用ruby做那件事.

提前致谢.

fme*_*dez 26

稍微改善以前的答案:

require 'fileutils'
Dir.glob('/path_to_file_directory/*.eml').each do |f|
    FileUtils.mv f, "#{File.dirname(f)}/#{File.basename(f,'.*')}.html"
end
Run Code Online (Sandbox Code Playgroud)

File.basename(f,'.*')会给你不带扩展名,否则文件将被endup的file_name.eml.html代替file_name.html名称


knu*_*nut 7

Rake提供了一个简单的命令来更改扩展名:

require 'rake'
p 'xyz.eml'.ext('html') # -> xyz.html
Run Code Online (Sandbox Code Playgroud)

再次改进以前的答案:

require 'rake'
require 'fileutil'
Dir.glob('/path_to_file_directory/*.eml').each do |filename|
    FileUtils.mv( filename, filename.ext("html"))
end
Run Code Online (Sandbox Code Playgroud)


ron*_*nen 5

Pathname具有sub_ext()替换扩展的方法,以及glob()rename(),允许更紧凑地重写接受的答案:

require 'pathname'
Pathname.glob('/path_to_file_directory/*.eml').each do |p|
    p.rename p.sub_ext(".html")
end
Run Code Online (Sandbox Code Playgroud)