2010-07-26 48 views
5

源目錄,像這樣確定的:老的rsync和文件名中的空間

SHOW=${PWD##*/} 
[email protected]:"/mnt/bigfish/video/TV/${SHOW}/" 

所以它出來是這樣的:

[email protected]:/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」不是目錄等, y空格分隔的單詞是源目錄的名稱。

我該如何糾正這個令人討厭的問題?

UPDATE我對OS 10.6運行此,我結束了字符串替換空間與空間逃出像這樣:

[email protected]:"/mnt/bigfish/video/TV/${SHOW// /\ }/" 

回答

6

rsync manual

-s, --protect-args
此選項將所有文件名和大多數選項發送到 遠程rsync,而不允許遠程shell解釋它們。 這個 表示空格不是分割名稱,並且任何非通配符 特殊字符都不會被翻譯(例如〜,$,;,&, 等)。通配符在遠程主機上擴展了 rsync (而不是shell執行它)。

+0

Snow Leopard中的Darwin 10.4 build rsync沒有這樣的選項。 – Wells 2010-07-26 00:51:27

+0

+1肯定聽起來比我想象的更合理 – 2010-07-26 00:51:30

+1

@wells:那麼你應該可以獲得比蘋果決定寄給你的六年前更新的版本:http://developer.apple.com/mac/library/文檔/達爾文/參考/ ManPages/10.4/man1/rsync.1.html?useVersion = 10.4 – msw 2010-07-26 01:00:53

1

這工作:

rsync -avz -e ssh "[email protected]:\"/mnt/bigfish/video/TV/${SHOW}/\"" 

所以設置:

[email protected]:\"/mnt/bigfish/video/TV/${SHOW}/\" 

至少,這裏在Debian上它就像一個魅力,沒有OS 10可在這裏進行測試。

+0

是的,-s和手動轉義是推薦的解決方法。從手冊:「如果您需要傳輸包含空格的文件名,您可以指定--protect-args(-s)選項,或者您需要以遠程shell將理解的方式轉義空格「。 – tokland 2010-07-26 13:56:54

2

至於你的問題是專用於OS X,根據Apple rsync manual您可以使用簡單的引號或通配符?做到這一點:

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 [email protected]:'/volume1/devel/__To\ SORT/___XXXXX\ Saves\ 2011-04' ./Saves2011 
0

你可以,如果你與參數在腳本處理上OSX做到這一點:

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