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

时间:2013-03-11 09:51:19

标签: ruby

我有文件夹>存储* html.erb文件的子文件夹,我需要将其重命名为* .haml Extension。

\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

但它只打印扩展的第一部分,然后我需要以某种方式正确地重命名它?

2 个答案:

答案 0 :(得分:2)

在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 's/\.html\.erb$/\.haml/' folder/*/*.html.erb

答案 1 :(得分:2)

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

  1. 主要问题是重命名的条件是测试“erb”(方法extname只返回最后一段)包含“html.erb”,这永远不会是真的;
  2. 小问题是重命名时使用的正则表达式不会转义点,也不会测试行尾;
  3. 所以我决定做出那些调整:

    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