2013-10-14 8 views
10

Linuxパスのスペースをエスケープしようとしています。しかし、バックスラッシュをエスケープしようとすると、ダブルスラッシュで終わります。Rubyのgsubを使ってLinuxパス名のスペースを取り除く

例パス:

/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf 

私は、Linuxでこれを使用できるように、私はそれを脱出したいと:

backup_item.gsub("\s", "\\\s") 

:だから私はこれをしようとしている

/mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf 

しかし、私は予期しない結果を得る

/mnt/drive/site/usa/1201\\ East/1201\\ East\\ Invoice.pdf 

答えて

29

ステファンは右;

require 'shellwords' 

puts Shellwords.shellescape "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf" 
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf 

# or just 

puts "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf".shellescape 
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf 
+1

または 'shellwords.escape( '/ mnt/drive/site/usa/1201 East ...')'。 – hagello

8

を "特殊文字をエスケープして、引用符で囲まれた列strの印刷可能なバージョン、" 文字列のinspect値、次のとおりです。

quoted = "path/to/file with spaces".gsub(/ /, '\ ') 
=> "path/to/file\\ with\\ spaces" 

だけで文字列を出力:

puts quoted 

出力:

path/to/file\ with\ spaces 
+0

ただ、誰もがこのソリューションを使用することを考慮するために:私はちょうどあなたが使用するシェルのための文字列をエスケープする必要がある場合は、Shellwords::shellescapeを確認する必要があることを指摘したいShellwordsも '$ {などの特殊文字} []'などをエスケープ。 – Wukerplank

関連する問題