11

リモートフォルダーにある.emlファイルのリストがあります

\\abcremote\pickup

からすべてのファイルの名前を変更したい

xyz.eml to xyz.html

Rubyを使ってそれを行うのを手伝ってくれませんか。

前もって感謝します。

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.html ではなく file_name.eml.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()andrename()があり、受け入れられた回答をもう少しコンパクトに書き直すことができます。

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 に答える
2

Dir.globそのフォルダの場所にアクセスできる限り、使用できるはずですFileUtils.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

これを行う 1 つの方法は、net-sftp ライブラリを使用することです。以下の方法では、すべてのファイルの名前を目的のファイル拡張子で変更します。これにより、他の形式が変更されていないことも確認されます。

  1. dir = "パス/to/リモート/ディレクトリ"
  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

于 2016-07-21T20:21:46.987 に答える