以下是详细信息
本地目录是
mnt/xlses/split/v2/name with space
远程目录是
mnt/xlses/split/v2/name with space
我已经尝试了所有可以发现的最新尝试
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/"name with space"
运行第一件事时报告的是它正在创建一个新目录
我打断它,看到有一个新目录
mnt/xlses/split/v2/name
我所有的文件都在该目录中
我希望它们位于
mnt/xlses/split/v2/name with space
#1 楼
尝试rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space root@myserver.com:/mnt/xlses/split/v2/
我从源目录路径中删除了斜杠
/
。这将使rsync
复制目录及其所有内容,这意味着rsync
将担心在远程主机上(而不是您)正确获取名称。#2 楼
尝试rsync --protect-args --size-only -avzPe ssh "/mnt/xlses/split/v2/name with space/ "root@myserver.com:/mnt/xlses/split/v2/name with space"
来自
man rsync
:-s,--protect-args
此选项将所有文件名和大多数选项发送到远程rsync,而不允许远程shell解释它们。这意味着名称中不会分隔空格,并且不会翻译任何非通配符特殊字符(例如〜,$,;,&等)。通配符通过rsync在远程主机上扩展(而不是通过shell进行扩展)。
[...]
评论
这不适用于Mac。
–马特·亚历山大(Matt Alexander)
2014-09-25 21:33
如果您使用自制软件安装了最新版本的rsync,则可在Mac上使用。
– Adriaan Tijsseling
2015年2月9日在16:17
通过运行man rsync并在(/ s)中搜索“ --protect”,查看它是否在您的rsync版本中。要使用homebrew安装:brew install homebrew / dupes / rsync如果未找到,请运行brew search rsync。
– MikeiLL
2015年6月1日于17:08
无需安装新版本,您只需转义空格并引用主机名/文件名-例如rsync -Pavuz'you @ host:〜/ file \有\空格'./
–ocodo
2015年12月11日9:33
这应该是公认的答案。
–乔什·M。
19年3月18日在23:58
#3 楼
在bash中有效:用反斜杠转义空格,然后使用引号: :rsync -avuz me@some.server.com:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .
评论
那对我有用。使我不必在Mac服务器上工作。
–乔治
2015年10月29日在20:17
应该将其标记为正确答案。关键是您需要反斜杠和引号。
– Sridhar Sarnobat
16年4月14日在17:33
两次转义很麻烦,-s选项可在任何现代版本的rsync上使用,并且旨在解决此问题。
– Mark K Cowan
16年7月23日在21:14
注意:如果要从路径中带有空格的远程服务器复制到具有空间的本地路径,则只需将引号添加到远程路径。
– lenooh
18-10-2在14:46
@teekarna的解决方案为我工作。按照“ rsync”手册页,替代方法是使用“ --protect-args”或“ -s”-对我也有用。
– Kishan Parekh
19-10-2在10:26
#4 楼
使用两对引号不要打扰所有反斜杠,只需在双引号内使用单引号即可:
ssh me@myserver.com:"'/home/me/test file'" .
也可以使用反引号,即在单引号内使用双引号: br />
如果要在服务器而不是客户端上解释
*
,则*
必须仅位于两对引号之一内。我发现这是违反直觉的,因为从逻辑上说,外部的一对引号可以逃避客户端的解释,而内部的一对引号可以避免服务器的解释。与--protect-args
解决方案相比,您实际上没有--protect-args
的限制,因此可以使用特殊字符,例如~
或$
。因此,您可以这样写:ssh me@myserver.com:'"/home/me/test file"' .
或
rsync host:'"$HOME/test file"' .
请注意,后者中的波浪号(
~
)该示例需要放在双引号之外。您可以在整个username @ host:file部分(例如
ssh "me@myserver.com:'/home/me/test file'" .
)周围放置一对引号(例如,评论
实际上,您关于根本不将宿主部分放在引号中的建议更具洞察力,因此很容易将其设为帖子的第一行。
– Sridhar Sarnobat
18年6月29日在0:26
这个解决方案很棒!通过ssh通过rsync像在锡罐上一样工作。
– Ikon
18年7月15日在19:22
考虑一下时,两对引号是完全合乎逻辑的:外部的一对引号是这样的,以便客户端将其不可分割地对待(其内容逐字传递到服务器),内部的一对引号用于服务器认识到不可分割性。
– Sridhar Sarnobat
18-10-12在21:16
这个答案被低估了。
–
19-10-11在20:31
它有时.....但是您可以在本地url和远程url上都定义:'...',因此它对一个或另一个都适用。
–mmm
19年11月7日在19:48
#5 楼
我知道这是一个古老的问题,但是我想我应该补充一下现有的知识。我的文件夹编号为1-10,如下所示:rsync
The\ Folder1
The\ Folder2
..
The\ Folder3
您要使用
The\ Folder10
的2个实例是本地和远程的。 本地-注意缺少引号。
rsync -avu /media/data/The\ Folder* .
远程-注意存在报价单
rsync -avu -e ssh you@domain.com:"/media/data/The\ Folder*" .
#6 楼
一般而言,引用参数并在参数中转义空格。在您提供的示例中,尝试:rsync --size-only -avzPe ssh "/mnt/xlses/split/v2/name\ with\ space/" "root@myserver.com:/mnt/xlses/split/v2/name\ with\ space"
#7 楼
来自rsync
联机帮助页: If you need to transfer a filename that contains whitespace, you can
either specify the --protect-args (-s) option, or you'll need to escape
the whitespace in a way that the remote shell will understand. For
instance:
rsync -av host:'file\ name\ with\ spaces' /dest
#8 楼
在macOS上,我必须正常转义第一个路径,第二个路径转义+引号。例如:rsync -avhu VirtualBox\ VMs/Windows\ 10 bob@192.168.1.42:"/Users/bob/VirtualBox\ VMs/"
这是唯一在macOS上使用空格的组合。
两台机器都是macs。
评论
我认为您的意思是第二条路径必须使用引号(而不是括号)。这对于我从1台Mac转移到另一台Mac也起作用
– Mac471
1月4日7:28
Mac471:是的,这是一个错字,现在已修复!
– lenooh
1月4日14:43
#9 楼
好吧,我将自己回答这个问题,尽管其他人可能会更好地解释它。很难使用引号或斜杠来转义空格,但是我们可以使用通配符,所以我做到了这一点。最后,我需要了解如何设置远程服务器,以便它可以更有效地解析路径名-我从不在目录名中使用空格,但是设置此功能的人确实做到了,至少现在我受困了
评论
您的建议仅起作用,因为您在第一次尝试(失败)时已经创建了目标目录。查看我的答案以获得更简单的方法(该方法还具有不依赖于失败的首次尝试的优势:)。
– dg99
2013年12月10日23:02
实际上,该目录已经存在。您不正确,但失败了,它创建了目录/〜/ name而不是/〜/ name带有空格的地方,我删除了/〜/ name并继续尝试其他选项目录/〜/ name带有空格的存在已经在我尝试添加文件中对此
– PyNEwbie
2013年12月10日23:21
哦,我明白你的意思。
– dg99
2013年12月11日下午0:12
如果引用主机/路径并转义空格,则可以使用。
–ocodo
2015年12月11日9:34
#10 楼
根据情况,一个快速的选择是在远程系统上创建一个符号链接:user@remote$ ln -s ~/name\ with\ space/ ~/name_with_space
评论
我喜欢这种想法,有时符号链接会绕过命名错误或不必要的复杂层次结构的麻烦。
– Sridhar Sarnobat
18年6月29日在0:24
#11 楼
尝试这种方式:find /path/ -exec rsync -A -X -av -r -s root@xxxx:/path/ {} \;
#12 楼
rsync /mnt/xlses/split/v2/name\\ with\\ space/ root@myserver.com:/mnt/xlses/split/v2/name\\ with\\ space
双重逃逸也可以使用
评论
这没有说明如何处理远程端的空间。
–ckujau
17年9月21日在21:36