我正在尝试按照与此问题中提到的相同的方式执行某些操作:RSync: How do I synchronize in both directions?
然而,我无法弄清楚我是否应该在文件路径的末尾添加斜杠。基本上我试图创建一个别名命令来同步两个目录的内容,这两个目录的名称相同但位于两个不同的服务器上。我不想要的是将一个目录复制到另一个目录中(我知道这可能取决于最后的斜杠是如何完成的)。
目前我所拥有的是:
alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory/'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory/'
对于我想要完成的任务,两个文件路径的末尾是否应该有斜杠?
提前感谢您的帮助。
答案 0 :(得分:22)
在rsync(1)
联机帮助页中对此进行了描述。
源上的尾部斜杠会更改此行为,以避免在目标位置创建其他目录级别。你可以想到一个 尾随/在源上作为含义"复制该目录的内容"而不是"按名称"复制目录,但在两种情况下都是 包含目录的属性将传输到目标上的包含目录。换句话说,以下每一个 - ing命令以相同的方式复制文件,包括它们对/ dest / foo:
属性的设置rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
关于目的地,我认为它没有任何重大后果。如果源是文件并且目标不存在 - 命令
,则会有所不同rsync SRC DEST
将制作SRC
DEST
的副本,而
rsync SRC DEST/
将创建目录DEST
并将SRC
文件复制到其中。
答案 1 :(得分:3)
在源上保留斜杠,并将其从目标中删除。 像这样:
alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory'
答案 2 :(得分:1)
我对Ubuntu 17.04上接受的答案有不同的结果,似乎目的地/没有效果。 我做了以下四个命令:
结论:
答案 3 :(得分:1)
我在Arch Linux上使用rsync 3.1.3对其进行了测试,结果如下:
1. rsync -avPzu test login@remote:/home/login/test "test" directory is copied inside of existing "test" on remote (structure is then test/test/...)
2. rsync -avPzu test login@remote:/home/login/test/ same as above
3. rsync -avPzu test/ login@remote:/home/login/test content of "test" directory is synchronized with the remote "test" directory
4. rsync -avPzu test/ login@remote:/home/login/test/ same as above
5. rsync -avPzu test login@remote:/home/login/ same as above
6. rsync -avPzu test login@remote:/home/login same as above
在这种情况下,方法3-6是正确的,与公认的答案相反。