2013-05-08 70 views
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 

回答

0
Dir.glob('**/*.new').each do |f| 
    filename = File.expand_path('../' + File.basename(f, File.extname(f)), f) 
    # or 
    # filename = f.sub(/\.new$/, '') 

    File.rename(f, filename) 

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

的作品伴侣。 – 2013-05-08 17:50:58

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