Изменение расширения файла с помощью 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

проще

'abc . . def.mp3'.sub /.[^\.]+$/, '.opus'

путь имеет sub_ext() метод замены расширения, а также glob() и rename(), что позволяет переписать принятый ответ немного компактнее:

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

один из способов сделать это-использовать библиотеку net-sftp: Ниже метод переименует все файлы с требуемым расширением файла, которое также убедитесь, что другие форматы нетронуты.

  1. dir = "путь/к / удаленному / каталогу"
  2. actual_ext = ".eml"
  3. 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