0

*.haml 拡張子に名前を変更する必要がある *html.erb ファイルが格納されたフォルダー > サブフォルダーがあります。

\folder
  \folder
    \*html.erb
    \*html.erb
    \*html.erb
    \*html.erb
  \folder
    \ ###
    \ ###
    \ ###
  \folder

このタスクには Ruby スクリプトのみを使用したいと考えています。
これまでのところ、次の Ruby スクリプトがあります。

f_p = "/home/ocean/Documents/testr/"
Dir.glob(f_p + "*").sort.each do |f|
  filename = File.basename(f, File.extname(f))
  puts filename
end

しかし、それは拡張機能の最初の部分だけを出力するだけなので、どういうわけか正しく名前を変更する必要がありますか?

4

2 に答える 2

2

toch が提供する答えはほぼ正しいですが、いくつかの問題があります。

  1. 主な問題は、名前を変更する条件が、"erb" (メソッド extname が最後のセグメントのみを返す) に "html.erb" が含まれているかどうかをテストすることであり、これは決して真ではありません。
  2. マイナーな問題は、名前の変更に使用される正規表現がドットをエスケープしておらず、行末もテストしていないことです。

だから私はそれらの調整をすることにしました:

base_dir = "./views"
Dir.glob( File.join(base_dir, "/**/*") ).sort.each do |file|
  File.rename(file, file.gsub(/html\.erb$/, "haml")) if File.basename(file) =~ /html\.erb$/
end
于 2013-03-11T11:00:51.623 に答える
2

ルビーでは、

dir_root = "./folder"
Dir.glob( File.join(dir_root, "/**/*") ).sort.each do |file|
  if file.match(/\.html\.erb$/)
    File.rename(file, file.gsub(/html\.erb/, "haml"))
  end
end

Ruby ではなく、rename コマンドを使用した Bash で:

rename 's/\.html\.erb$/\.haml/' folder/*/*.html.erb
于 2013-03-11T10:01:35.137 に答える