在批处理文件中执行的rsync文件路径中使用空格

时间:2012-08-27 07:05:55

标签: path whitespace rsync spaces

所以我使用rsync来备份一些常用的目录,使用批处理脚本和Windows调度程序,如下所示:

rsync.bat

@echo off

C:
chdir C:\Cygwin\bin

bash --login -i -c %1

我正在使用Windows Scheduler定期运行此批处理脚本,这非常有效 - 直到我在文件路径中添加空格。以下是我在批处理文件快捷方式中使用的目标路径的示例:

目标: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开关,一些研究在过去解决了这个问题,但唉,没有工作要么。任何人都知道如何让这个工作?

4 个答案:

答案 0 :(得分:10)

空格的问题在于解释命令行的 argv 处理。与任何其他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

答案 1 :(得分:0)

我在Windows 7下的批处理文件中使用 rsync 时遇到了类似的问题。批处理文件代码是:

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/

答案 2 :(得分:0)

特例: 如果路径中有空格和通配符(*),则上述解决方案似乎不起作用(rsync: link_stat...failed

仅围绕 带引号的空格似乎有效。

/cygdrive/C/My" "Folder" "/My" "File*.txt

答案 3 :(得分:0)

上面的“仅用引号括住空格似乎可行”是唯一帮助我制作具有很多空格的OneDrive目录副本的解决方案。这是我必须使用的语法的短处

rsync -avz --progress --exclude-from%excludefile%/ cygdrive / C / Users / username / OneDrive“”-“” company1“” company2,“” Inc / Documents / * / cygdrive / x / msi / MyDocuments / --log-file = rsync-MyDocs.LOG