2013-02-21 41 views
8

我的這是在一個遠程文件夾.eml文件列表說使用Ruby

\\abcremote\pickup 

我想所有的文件

xyz.eml to xyz.html 

重命名更改文件擴展名可能你們幫我用紅寶石做這個。

在此先感謝。

回答

22

提高以前的答案一點:

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

+0

真棒謝謝! – bragboy 2015-05-07 09:59:42

+0

不知道第二個參數是否爲'File.basename'。比我之前一直使用的'File.basename(f).sub(/\.[^.]+$/,'')'這樣的一些討厭的東西乾淨得多。 – erich2k8 2016-01-15 03:48:33

+0

謝謝,這真棒,寫得很好! – 2017-12-24 22:44:18

2

只要你可以訪問該文件夾的位置,你應該能夠使用Dir.globFileUtils.mv

Pathname.glob('path/to/directory/*.eml').each do |f| 
    FileUtils.mv f, "#{f.dirname}/#{f.basename}.html" 
end 
+1

我不得不使用'f.basename(f.extname)','否則包括basename'擴展。 – juanpastas 2013-10-04 21:17:26

2

簡單

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

應該是'\。[^ \。] + $'(轉義第一個點):) – 2017-10-04 18:37:43

0

一個做到這一點的方法是使用淨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

7

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