2012-03-04 10 views
0

Rubyでファイルの名前を変更するときに、コロンをどのようにエスケープしますか? Iコードを以下た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"となります。

バックスラッシュでコロンでエスケープしようとしましたが、出力が次のように表示されるため、動作していません。。

名前を変更するファイルの文字列にコロンを付けることはできますか? FYI

+0

どのシステムをお使いですか? Windowsはファイル名に ':'を許さない。いくつかのOS(私はMacと思う)は、フォルダの区切り記号として ':'を使います。 Rubyは ':'を新しいフォルダとして解釈しているようです。 – knut

+2

@knut:古いMacOSはフォルダに ':'を使い、OSXはUnixの他のフレーバーと同様に '/'を使います。コロンの付いたファイル名はそのままシェルに表示されますが、Finderは表示目的でコロンをスラッシュに変換します。 –

+2

@muistooshort:技術的には、HFS + - IIRCの区切り記号として技術的にはまだ使用されていますが、POSIXレベルで "/"とスワップされています(POSIXのセパレータなので)。バック。 – Chuck

答えて

0

- コロンが同じファイルの別のストリームを識別するNTFSに...「フーバー:foo.txtのは、」ファイル「フーバー」、ストリーム「foo.txtのを」識別します。参照 "代替データストリーム"(現在http://support.microsoft.com/kb/105763) AFIKこの機能は実際には広く使われているわけではありませんが、私はそれをファイルにタグ付けするのに使用しています(ストリーム*:sha1の下でファイルのsha1をデュープ識別のために保存するのに使用します)。

関連する問題