0

我有存储 *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

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

4

2 回答 2

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 回答
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 回答