2012-03-04 96 views
0

在Ruby中重命名文件時,如何轉義冒號?Ruby的重命名方法;轉義冒號

我有以下代碼(名稱與已填充在數據的散列):

new_filename = "" 
counter = 0 
Dir.glob(folder_path + "/*").each do |f| 
    numbering = names.index(names.values.sort[counter]) 
    new_filename = numbering + " - " + names.values.sort[counter] 
    puts "New file name: " + new_filename 
    File.rename(f, folder_path + "/" + new_filename + File.extname(f)) 
    counter += 1 
end 

puts "Renaming complete." 

new_filename輸出是正確的,例如"Foo - Bar: Foo.txt"。重命名文件時,該文件具有以下格式:"Foo - Bar/ Foo.txt"

我試着用反斜線冒號轉義,但似乎不起作用,因爲我的輸出如下所示:"Foo - Bar/\ Foo.txt"

是否可以在重命名文件的字符串中有冒號?

+0

你使用哪個系統? Windows不允許在文件名中使用':'。某些操作系統(我認爲Mac)使用':'作爲文件夾的分隔符。似乎Ruby將':'解釋爲一個新文件夾。 – knut 2012-03-04 23:24:10

+2

@knut:舊的MacOS使用':'作爲文件夾,OSX使用像其他類型Unix一樣的'/'。帶有冒號的文件名顯示在shell中,但Finder會將冒號轉換爲斜線以便顯示。 – 2012-03-04 23:27:16

+2

@ muistooshort:從技術上講,我很確定「:」仍然用作HFS + - IIRC中的分隔符,它在POSIX級別與「/」交換(因爲這是POSIX分隔符),然後GUI層交換它們背部。 – Chuck 2012-03-04 23:41:04

回答

0

僅供參考 - 在NTFS中,冒號標識同一文件的單獨流...「Foo Bar:Foo.txt」標識文件「Foo Bar」,流「Foo.txt」。參考「備用數據流」(目前爲http://support.microsoft.com/kb/105763)。 AFIK這個特性並沒有被廣泛使用,儘管我已經看到它使用第三方數據來標記文件(我用它來存儲一個文件的sha1,用於在流*:sha1下的模糊識別)。