2012-03-04 101 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下的模糊识别)。