старый rsync и пробелы в именах файлов - PullRequest
5 голосов
/ 26 июля 2010

Исходный каталог определяется так:

SHOW=${PWD##*/}
SRC=wells@server.com:"/mnt/bigfish/video/TV/${SHOW}/"

Итак, получается что-то вроде:

wells@server.com:/mnt/bigfish/video/TV/The Name Of the Show With Spaces/

Затем попытка запустить rsync так:

rsync -avz -e ssh "${SRC}" .

Но он говорит мне, что "" / mnt / bigfish / video / TV / "не является каталогом", "/ mnt / bigfish / video / TV / Name" не является каталогом и т. Д., Хотя многиеслова с разделителями находятся в названии исходного каталога.

Как я могу исправить эту чрезвычайно раздражающую проблему?

ОБНОВЛЕНИЕ Я запускаю это на OS 10.6, и язакончил замену строк пробелами с пробелами как:

SRC=wells@kittenfactory.com:"/mnt/bigfish/video/TV/${SHOW// /\ }/"

Ответы [ 4 ]

6 голосов
/ 26 июля 2010

Из руководства rsync :

-s, --protect-args
Этот параметр отправляет все имена файлов и большинство параметров на удаленный rsync, не позволяя удаленномуоболочка, чтобы интерпретировать их.Это означает, что пробелы не разделяются в именах, и любые не подстановочные специальные символы не переводятся (например, ~, $,;, & и т. Д.).Подстановочные знаки расширяются на удаленном хосте с помощью rsync (вместо оболочки, делающей это).

2 голосов
/ 18 октября 2012

Поскольку ваш вопрос посвящен OS X, согласно руководству Apple rsync , вы можете сделать это, используя простые кавычки или подстановочный знак ?:

rsync -av host:'file\ name\ with\ spaces' /dest
rsync -av host:file?name?with?spaces /dest

Только чтосделать это и использовать простые кавычки прекрасно работает:

rsync -r --partial --progress --exclude=".cvs" --exclude=".svn" --exclude=".git" --rsh=ssh root@datakeep.local:'/volume1/devel/__To\ SORT/___XXXXX\ Saves\ 2011-04' ./Saves2011
1 голос
/ 26 июля 2010

Это работает:

rsync -avz -e ssh "wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\""

Так установлено:

SRC=wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\"

По крайней мере, здесь, в Debian, он работает как шарм, здесь нет OS 10 для тестирования.

0 голосов
/ 27 февраля 2014

Вы можете сделать это в OSX, если имеете дело с аргументами в скрипте:

ESCAPED_SRC="$(echo "$SRC" | tr ' ' '\\ ')"
ESCAPED_DEST="$(echo "$DEST" | tr ' ' '\\ ')"
rsync -ravP "$ESCAPED_SRC" "$ESCAPED_DEST"
...