0

すべての .new ファイル拡張子の名前を新しい名前に変更するメソッドを作成しようとしていますが、同様の投稿を見たことがありますが、私が求めているほど具体的なものはありません。

メソッドが複数のディレクトリを検索しているため、私のコードは、それが含まれているディレクトリ内のファイルの名前を変更する必要があります。私が書いたコードは、ルート ディレクトリ内のファイルの名前を変更します。

この関数は複数のディレクトリで実行されるため、使用しても機能pathname = "/path/to/app/"しません。コードは次のとおりです。

dotNewFiles = File.join("**", "*.new") 

Dir.glob(dotNewFiles).each do |f|
  filename = File.basename(f, File.extname(f))

  #keep it commented until it works 
  #File.rename(f, filename)

  print "Renamed File from:\t"
  printf "%-50s %s\n", f, "to".upcase + "\t" + filename
end

私の出力は次のようになります。

Renamed File from:  app/assets/javascripts/application.js.new   TO   application.js

 Renamed File from:  app/assets/stylesheets/application.css.new   TO   application.css
4

2 に答える 2

0

次のように、ディレクトリを考慮する必要があります。

Dir.glob(dotNewFiles).each do |f|
  dirname, basename = File.split(f)           # split filename into directory and basename
  basename = File.basename(basename, ".new")  # change basename
  filename = File.join(dirname, basename)     # join directory and new basename
  File.rename(f, filename)
end
于 2013-05-08T16:48:04.087 に答える