2013-05-08 73 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