2012-03-04 3 views
0

Как избежать двоеточия при переименовании файлов в Ruby?Переименовать метод Ruby; escaping colon

Я следующий код (имена хэш с данными, уже заполненных):

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

+2

@knut: Старый MacOS использовал ':' для папок, OSX использует '/', как и другие варианты Unix. Имя файла с двоеточием отображается как-есть в оболочке, но Finder преобразует двоеточие в косую черту для отображения. –

+2

@muistooshort: Технически я уверен, что «:» по-прежнему используется как разделитель в HFS + - IIRC, он заменяется «/» на уровне POSIX (потому что это разделитель POSIX), а затем слой GUI меняет их назад. – Chuck

ответ

0

FYI - в NTFS двоеточие идентифицирует отдельный поток того же файла ... «Foo Bar: Foo.txt» идентифицирует файл «Foo Bar», поток «Foo.txt». Ссылка «Альтернативные потоки данных» (в настоящее время http://support.microsoft.com/kb/105763). AFIK эта функция не очень широко используется, хотя я видел, что она использовала для тегов файлов с данными thrid-party (я использую его для хранения файла sha1 для идентификации обмана в потоке *: sha1).

Смежные вопросы