Escape пробелы в пути linux с Ruby gsub

Я пытаюсь избежать пробелов в пути Linux. Однако, когда я пытаюсь избежать моей обратной косой черты, я получаю двойную косую черту.

Пример пути:

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

Чтобы я мог использовать это в Linux, я хочу избежать его как:

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

Итак, я пытаюсь это сделать:

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

Но я получаю неожиданный вывод

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

Ответ 1

Стефан прав; Я просто хочу указать, что если вам нужно избегать строк для использования оболочки, вы должны проверить Shellwords::shellescape:

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

Ответ 2

Это строка inspect значение, "печатная версия str, окруженная кавычками, со специальными символами, экранированными":

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

Просто напечатайте строку:

puts quoted

Вывод:

path/to/file\ with\ spaces