我正在尝试从一台服务器同步到另一台服务器。服务器具有相同的目录结构,但是当远程服务器中有空格时,我无法让远程服务器正确识别远程服务器上的路径名。
这是详细信息
本地目录是
mnt/xlses/split/v2/name with space
Run Code Online (Sandbox Code Playgroud)
远程目录是
mnt/xlses/split/v2/name with space
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有我能找到的最新尝试是
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/"name with space"
Run Code Online (Sandbox Code Playgroud)
当它运行时,它报告的第一件事是它正在创建一个新目录
我打断它,看到有一个新目录
mnt/xlses/split/v2/name
Run Code Online (Sandbox Code Playgroud)
我的所有文件都在该目录中
我期待他们在
mnt/xlses/split/v2/name with space
Run Code Online (Sandbox Code Playgroud)
joh*_*ate 190
尝试
rsync --protect-args --size-only -avzPe ssh "/mnt/xlses/split/v2/name with space/ "root@myserver.com:/mnt/xlses/split/v2/name with space"
Run Code Online (Sandbox Code Playgroud)
来自man rsync:
-s, --protect-args
此选项将所有文件名和大多数选项发送到远程 rsync,而不允许远程 shell 解释它们。这意味着空格不会在名称中拆分,并且不会翻译任何非通配符特殊字符(例如 ~、$、;、& 等)。通配符由 rsync 在远程主机上扩展(而不是由 shell 执行)。[...]
小智 53
这适用于 bash:用反斜杠转义空格,然后使用引号:
rsync -avuz me@some.server.com:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .
Run Code Online (Sandbox Code Playgroud)
或者,如果您在变量 $remote_path 中有路径,则可以使用替换来转义空格:
rsync -avuz me@some.server.com:"${remote_path// /\\ }" .
Run Code Online (Sandbox Code Playgroud)
Sri*_*bat 30
不要理会所有的反斜杠,只需在双引号内使用单引号:
ssh me@myserver.com:"'/home/me/test file'" .
Run Code Online (Sandbox Code Playgroud)
您也可以使用相反的方法,即在单引号内使用双引号:
ssh me@myserver.com:'"/home/me/test file"' .
Run Code Online (Sandbox Code Playgroud)
如果您希望 a*在服务器上而不是在客户端上被解释,则*必须仅在两对引号中的一对内。我觉得这违反直觉,因为从逻辑上讲,外对引号会转义客户端解释,而内对引号会转义服务器解释。
与--protect-args解决方案相比,优点是您实际上没有 的限制--protect-args,因此您可以使用特殊字符,例如~或$。所以你可以写:
rsync host:'"$HOME/test file"' .
Run Code Online (Sandbox Code Playgroud)
或者
rsync host:'~"/test file"' .
Run Code Online (Sandbox Code Playgroud)
请注意,~后一个示例中的波浪号 ( ) 需要在双引号之外。
您可以在整个 username@host:file 部分周围放置一对引号(例如ssh "me@myserver.com:'/home/me/test file'" .)
尝试
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space root@myserver.com:/mnt/xlses/split/v2/
Run Code Online (Sandbox Code Playgroud)
我/从源目录路径中去掉了尾部斜杠。这将rsync复制目录及其所有内容,这意味着rsync将担心在远程主机(它会)而不是您上获得正确的名称。
小智 6
我知道这是一个老问题,但我想我会添加到现有的知识体系中。
我已经使用rsync了多个有空间的文件夹,这很有效。我的文件夹编号为 1-10,如下所示:
The\ Folder1The\ Folder2The\ Folder3The\ Folder10您想要使用的 2 个实例rsync是本地和远程的。
本地- 请注意缺少引号。
rsync -avu /media/data/The\ Folder* .
Run Code Online (Sandbox Code Playgroud)远程- 注意引号的存在
rsync -avu -e ssh you@domain.com:"/media/data/The\ Folder*" .
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
97236 次 |
| 最近记录: |