2013-02-21 15 views
8

Mam listę plików .eml, które znajdują się w folderze zdalnym powiedziećZmiana rozszerzenia pliku przy użyciu Ruby

\\abcremote\pickup 

Chcę zmienić nazwy wszystkich plików z

xyz.eml to xyz.html 

Może wy mi pomóc rób to, używając ruby.

Z góry dziękuję.

Odpowiedz

22

Poprawa poprzednią odpowiedź trochę:

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,'.*') dadzą Ci nazwa bez rozszerzenia, w przeciwnym razie pliki będą miały nazwę file_name.eml.html zamiast file_name.html

+0

niesamowite dzięki! – bragboy

+0

Nigdy nie wiedziałem o drugim arg do "File.basename". O wiele czystsze niż niektóre nieprzyjemne rzeczy, takie jak 'File.basename (f) .sub (/\.[^.]+$/, ''), które zawsze robiłem wcześniej. – erich2k8

+0

dzięki, to jest niesamowite i dobrze napisane! –

2

tak długo, jak masz dostęp do tej lokalizacji folderu, powinieneś być w stanie korzystać Dir.glob i FileUtils.mv

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

musiałem użyć 'f.basename (f.extname)', inaczej 'basename' obejmuje rozszerzenie. – juanpastas

2

Prostsze

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

powinno być '\. [^ \.] + $' (Unikanie pierwszej kropki) :) –

0

Jednym ze sposobów, aby to zrobić za pomocą biblioteki net-sftp: Sposób poniżej nazwy wszystkich plików z rozszerzeniem pożądanego który będzie również upewnić się inne formaty są nietknięte.

  1. dir = "ścieżka/remote/katalog /"
  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 oferuje proste polecenie zmiany rozszerzenia:

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

Poprawa wcześniejsze odpowiedzi znowu trochę:

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