11

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

\\abcremote\pickup

我想重命名所有文件

xyz.eml to xyz.html

你们能帮我用红宝石做到这一点吗?

提前致谢。

4

6 回答 6

29

稍微改进一下之前的答案:

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.eml.html 而不是 file_name.html

于 2013-02-21T11:49:10.707 回答
10

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

require 'rake'
p 'xyz.eml'.ext('html') # -> xyz.html

再次改进以前的答案:

require 'rake'
require 'fileutils'
Dir.glob('/path_to_file_directory/*.eml').each do |filename|
    FileUtils.mv( filename, filename.ext("html"))
end
于 2016-07-21T20:43:28.643 回答
5

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

require 'pathname'
Pathname.glob('/path_to_file_directory/*.eml').each do |p|
    p.rename p.sub_ext(".html")
end
于 2018-04-16T11:20:01.233 回答
3

更简单

'abc . . def.mp3'.sub /\.[^\.]+$/, '.opus'
于 2016-04-08T23:09:21.887 回答
2

只要您有权访问该文件夹位置,您就应该能够使用Dir.globFileUtils.mv

Pathname.glob('path/to/directory/*.eml').each do |f|
  FileUtils.mv f, "#{f.dirname}/#{f.basename}.html"
end
于 2013-02-21T11:24:08.933 回答
0

一种方法是使用 net-sftp 库:以下方法将使用所需的文件扩展名重命名所有文件,这也将确保其他格式不受影响。

  1. dir =“路径/到/远程/目录”
  2. 实际_ext =“.eml”
  3. 想要的_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

于 2016-07-21T20:21:46.987 回答