41759


初の質問です。  
環境としては、Ruby 2.3.0, CentOS(VirtualBox)を使っています。

Rubyのコードとして、実行した時に、そのディレクトリ内のテキストファイル(.txt)をHTMLファイル(.html)  
に一括で置換する方法を模索しております。ターミナルでは

[code]

    rename .txt .html *.txt
    
[/code]

であれば、一括に.txtを.htmlにできるのですが、いざ、Rubyのコードに落とし込もうとすると、

[code]

    require "fileutils"
    File.rename (".txt", ".html", "*.txt")
    
[/code]

でエラーとなってしまいます。

renameコマンドをRubyに落とし込む方法、もしくはその他の方法で一括にテキストファイルをHTMLファイルに置換する方法があれば、ご教授いただけると幸いです。  
よろしくお願いいたします。


CC BY-SA 3.0
2018-02-16T01:25:06.557
41756
2018-02-19T06:52:17.950
2018-02-19T06:52:17.950
19110
25182
question
ruby
Rubyでテキストファイルの拡張子を".txt"から".html"に一括で置換したい


コマンドラインで使える rename コマンドと、 Ruby の File クラスの rename メソッドは全く別のものであり同じ使い方はできません。

[File.rename](https://docs.ruby-lang.org/ja/search/class:File/query:rename/)
の使い方は API リファレンスマニュアルを読めばわかるかと思いますが、1つのファイルのファイル名の変更(必要ならディレクトリの移動)を行うものです。

そのためプログラムから File.rename
で拡張子を変更したいならファイルの一覧を抽出してそれをループして各ファイルに対して拡張子を変更した新しいファイル名を作成して、File.rename()
を呼び出すことになります。

以下に一例を示します。

[code]

        #! /usr/bin/env ruby
        # -*- coding: utf-8 -*-
    
        require 'fileutils'
    
        old_ext = ".txt"
        new_ext = ".html"
    
        Dir::glob("./*#{old_ext}").each do |filename|
                newfilename = filename.gsub(/#{old_ext}$/, new_ext);
                print "filename => #{filename}, newfilename => #{newfilename}\n"
                File.rename(filename, newfilename)
        end
    
[/code]


CC BY-SA 3.0
2018-02-16T02:15:43.207
41759
2018-02-16T02:15:43.207
27410
41756
answer