Ruby 重命名多个*.html.erb文件

Ruby 重命名多个*.html.erb文件,ruby,Ruby,我有文件夹>子文件夹,其中存储了*html.erb文件,我需要将其重命名为*.haml扩展名 \folder \folder \*html.erb \*html.erb \*html.erb \*html.erb \folder \ ### \ ### \ ### \folder 我想专门使用Ruby脚本执行此任务。 到目前为止,我有以下Ruby脚本: f_p = "/home/ocean/Documents/testr/"

我有文件夹>子文件夹,其中存储了*html.erb文件,我需要将其重命名为*.haml扩展名

\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
但它只打印扩展的第一部分,然后我需要以某种方式正确重命名它?

在Ruby中

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中,而是在Bash中使用rename命令:

rename 's/\.html\.erb$/\.haml/' folder/*/*.html.erb
红宝石色

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中,而是在Bash中使用rename命令:

rename 's/\.html\.erb$/\.haml/' folder/*/*.html.erb

toch提供的答案几乎是正确的,但有几个问题:

  • 主要问题是,重命名的条件是测试“erb”(extname方法只返回最后一段)是否包含“html.erb”,这永远不会是真的
  • 小问题是,重命名上使用的正则表达式没有逃逸点,也没有测试行尾 所以我决定做这些调整:

    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
    

    toch提供的答案几乎是正确的,但有几个问题:

  • 主要问题是,重命名的条件是测试“erb”(extname方法只返回最后一段)是否包含“html.erb”,这永远不会是真的
  • 小问题是,重命名上使用的正则表达式没有逃逸点,也没有测试行尾 所以我决定做这些调整:

    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
    

    由于@warantesbr的回答,我已经更正了代码。我在整个文件名中使用了
    match
    ,而不是在basename上进行测试。由于@warantesbr的回答,我更正了我的代码。我对整个文件名使用了
    match
    ,而不是对basename进行测试。