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

Path 在批处理文件中排除的rsync文件路径中使用空格,path,whitespace,rsync,spaces,Path,Whitespace,Rsync,Spaces,因此,我使用rsync备份一些常用的目录,使用批处理脚本和windows调度程序,如下所示: rsync.bat 我正在使用Windows Scheduler定期运行此批处理脚本,在我将空格添加到文件路径之前,它工作得非常好。以下是我在批处理文件快捷方式上使用的目标路径示例: 目标:C:\Cygwin\scripts\rsync.bat rsync-vruh/cygdrive/t/uploads/cygdrive/d/Backups 那很好用。下面是一个带有空格的: 目标:C:\Cygwin\s

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

rsync.bat

我正在使用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开关反斜杠来避开空白,过去一些研究解决了这个问题,但可惜,这也行不通。有人知道如何让它工作吗?

空格的问题在于用于解释命令行的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解释的,那么一切都可以正常工作


空格的问题在于为解释命令行而进行的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解释的,那么一切都可以正常工作


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

rsync -hrtv --modify-window=3602 /cygdrive/c/Users/gavin/My Documents/ArmA Other Profiles/TheProf/ /cygdrive/h/Hobies/ARMA_BU/
这可能只是Windows 7的问题,但文件夹gavin/My Documents应该是gavin/Documents。此外,还需要单引号来克服空格,如:

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

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

rsync -hrtv --modify-window=3602 /cygdrive/c/Users/gavin/My Documents/ArmA Other Profiles/TheProf/ /cygdrive/h/Hobies/ARMA_BU/
这可能只是Windows 7的问题,但文件夹gavin/My Documents应该是gavin/Documents。此外,还需要单引号来克服空格,如:

rsync -hrtv --modify-window=3602 '/cygdrive/c/Users/gavin/Documents/ArmA Other Profiles/TheProf/' /cygdrive/h/Hobies/ARMA_BU/
特殊情况: 如果路径中有空格和通配符*,则上述解决方案似乎不起作用rsync:link_stat…failed

仅用引号包围空格似乎有效

/cygdrive/C/My" "Folder" "/My" "File*.txt
特殊情况: 如果路径中有空格和通配符*,则上述解决方案似乎不起作用rsync:link_stat…failed

仅用引号包围空格似乎有效

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

上面只围绕带引号的空格似乎是唯一的解决方案,它帮助我复制了一个包含很多空格的OneDrive目录。下面是我必须使用的语法的长短


rsync-avz-progress-excludefile%/cygdrive/C/Users/username/OneDrive-company1 company2中排除,Inc/Documents/*/cygdrive/x/msi/MyDocuments/-log file=rsync MyDocs.log

上述仅围绕带引号的空格的方法似乎有效,这是帮助我复制包含大量空格的OneDrive目录的唯一解决方案。下面是我必须使用的语法的长短


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

谢谢回复。这就是我过去为了修复它而做的事情+1此答案实际上是从那里复制和粘贴的-答案是正确的,但应注意,空间必须转义两次,一次用于本地shell解释命令,另一次用于远程计算机再次解释命令。感谢您的回复。这就是我过去为了修复它而做的事情+1该答案实际上是从那里复制和粘贴的-答案是正确的,但应注意,空间必须转义两次,一次用于本地shell解释命令,另一次用于远程机器再次解释命令。