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

tay*_*low 1 whitespace rsync spaces path

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

rsync.bat

@echo off

C:
chdir C:\Cygwin\bin

bash --login -i -c %1
Run Code Online (Sandbox Code Playgroud)

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

Vas*_*ily 10

空格的问题在于解释命令行的argv处理.与任何其他unix应用程序一样,您必须在命令行上以某种方式转义空格,否则它们将用于分隔参数.

例如:

rsync -av host:'"a long filename"' /tmp/
rsync -av host:'a\ long\ filename' /tmp/
rsync -av host:a\\\ long\\\ filename /tmp/
Run Code Online (Sandbox Code Playgroud)

或者使用'?' 只要没有其他匹配的文件名而不是带空格的文件名(因为'?'匹配任何字符),代替空格:

rsync -av host:a?long?filename /tmp/
Run Code Online (Sandbox Code Playgroud)

只要您知道命令行上的远程文件名由远程shell解释,那么一切正常.

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