Изменение расширения файла с помощью ruby
у меня есть список .файлы eml, которые находятся в удаленной папке, говорят
abcremotepickup
Я хочу переименовать все файлы из
xyz.eml to xyz.html
не могли бы вы помочь мне сделать это с помощью Ruby.
спасибо заранее.
6 ответов
улучшение предыдущего ответа немного:
require 'fileutils'
Dir.glob('/path_to_file_directory/*.eml').each do |f|
FileUtils.mv f, "#{File.dirname(f)}/#{File.basename(f,'.*')}.html"
end
на File.basename(f,'.*')
даст вам имя без расширения, иначе файлы в конечном итоге будут file_name.Полс.html вместо file_name.HTML-код
Rake предлагает простую команду для изменения расширения:
require 'rake'
p 'xyz.eml'.ext('html') # -> xyz.html
улучшение предыдущих ответов снова немного:
require 'rake'
require 'fileutil'
Dir.glob('/path_to_file_directory/*.eml').each do |filename|
FileUtils.mv( filename, filename.ext("html"))
end
пока у вас есть доступ к этой папке, вы должны быть в состоянии использовать Dir.glob
и FileUtils.mv
Pathname.glob('path/to/directory/*.eml').each do |f|
FileUtils.mv f, "#{f.dirname}/#{f.basename}.html"
end
один из способов сделать это-использовать библиотеку net-sftp: Ниже метод переименует все файлы с требуемым расширением файла, которое также убедитесь, что другие форматы нетронуты.
- dir = "путь/к / удаленному / каталогу"
- actual_ext = ".eml"
- desired_ext = ".HTML-код"
require 'net/sftp'
def add_file_extension(dir, actual_ext, desired_ext)
Net::SFTP.start(@host, @username, @password) do |sftp|
sftp.dir.foreach(dir) do |file|
if file.name.include? actual_ext
sftp.rename("#{dir}/#{file.name}", "#{dir}/#{file.name.slice! actual_ext}#{desired_ext}")
else
raise "I cannot rename files other than which are in #{actual_ext} format"
end
end
end
end