2012-08-27 70 views
1

所以我使用rsync備份一些常用目錄excecuted的rsync的文件路徑使用空格,使用批處理腳本和窗口調度爲在這裏看到:在一個批處理文件

rsync.bat

@echo off 

C: 
chdir C:\Cygwin\bin 

bash --login -i -c %1 

我正在使用Windows調度程序定期運行此批處理腳本,該工作完美 - 直到我將空間添加到文件路徑中。下面是我在批處理文件的快捷方式使用目標路徑的一個例子:

目標:C:\Cygwin\scripts\rsync.bat "rsync -vruh /cygdrive/t/uploads /cygdrive/d/Backups"

完美的作品。下面是一個用空格:

目標:C:\Cygwin\scripts\rsync.bat "rsync -vruh '/cygdrive/c/Users/username/My Documents' /cygdrive/d/Backups"

注意與空格的第一路單引號。我不能爲了我的生活找出爲什麼這不起作用 - 我試過使用-s開關逃避空白的反斜槓,一些研究在過去解決了這個問題,但是可惜的是,沒有工作。任何人都知道如何讓這個工作?

回答

9

空格的問題是在處理完成解釋命令行。和任何其他的Unix應用程序一樣,你必須以某種方式在命令行中轉義空格,否則它們將用於分隔參數。

例如: '?'

rsync -av host:'"a long filename"' /tmp/ 
rsync -av host:'a\ long\ filename' /tmp/ 
rsync -av host:a\\\ long\\\ filename /tmp/ 

或者使用

rsync -av host:a?long?filename /tmp/ 

只要你知道,在命令行遠程文件名是:代替空間的,只要沒有其他匹配的文件名不是一個用空格(「?」,因爲任何字符相匹配)由遠程shell解釋,然後它一切正常。

http://rsync.samba.org/FAQ.html#9

+0

感謝您的回覆。這是我過去最終做的解決之道。 +1 – taylorthurlow

+0

此答案實際上是從那裏複製並粘貼的 - http://rsync.samba.org/FAQ。html#9 –

+0

答案是正確的,但它應該注意,空間必須跳過_twice_,一次用於本地shell解釋命令,一次用於遠程機器再次解釋它。 –

0

我遇到了這個已經在批處理文件中使用rsync的在Windows 7也有類似問題的批處理文件代碼是:

rsync -hrtv --modify-window=3602 /cygdrive/c/Users/gavin/My Documents/ArmA Other Profiles/TheProf/ /cygdrive/h/Hobies/ARMA_BU/ 

這可能只是Windows 7的問題但文件夾gavin /我的文檔應該只是gavin/Documents。另外是需要單引號,克服了空間,如:

rsync -hrtv --modify-window=3602 '/cygdrive/c/Users/gavin/Documents/ArmA Other Profiles/TheProf/' /cygdrive/h/Hobies/ARMA_BU/ 
0

特殊情況: 如果有路徑和通配符(*)的空間,上述解決方案似乎不工作(rsync: link_stat...failed

周圍只有與引號的空間似乎工作。

/cygdrive/C/My" "Folder" "/My" "File*.txt 
相關問題