2013-02-21 11 views
8

ho un elenco di file .eml che si trovano in una cartella remota dicoCambiare estensione del file utilizzando rubino

\\abcremote\pickup 

voglio rinominare tutti i file dal

xyz.eml to xyz.html 

Potrebbe ragazzi mi aiuterà fallo usando il rubino.

Grazie in anticipo.

risposta

22

Migliorare la risposta precedente un po ':

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

Il File.basename(f,'.*') vi darà il nome senza l'estensione altrimenti i file finiranno per essere file_name.eml.html invece di file_name.html

+0

grazie fantastici! – bragboy

+0

Mai saputo del secondo argomento su 'File.basename'. Molto più pulito di una cosa brutta come 'File.basename (f) .sub (/\.[^.]+$/, '')' che ho sempre fatto prima. – erich2k8

+0

grazie, questo è fantastico e ben scritto! –

2

finché si ha accesso a quella cartella, si dovrebbe essere in grado di utilizzare Dir.glob e FileUtils.mv

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

ho dovuto usare 'f.basename (f.extname)', 'altrimenti basename' include l'estensione. – juanpastas

2

Più semplice

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

dovrebbe essere '\. [^ \.] + $' (Sfuggire al primo punto) :) –

0

Un modo per farlo è quello di utilizzare libreria net-sftp: Il metodo seguito rinominerà tutti i file con estensione file desiderato che sarà anche assicurarsi che altri formati sono intatte.

  1. dir = "a// directory path/remoto"
  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 offre un semplice comando per modificare l'estensione:

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

Migliorare le risposte precedenti ancora un po ':

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