斜杠和rsync命令

时间:2015-07-07 19:54:19

标签: linux unix directory rsync

我正在尝试按照与此问题中提到的相同的方式执行某些操作: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/'

对于我想要完成的任务,两个文件路径的末尾是否应该有斜杠?

提前感谢您的帮助。

4 个答案:

答案 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上接受的答案有不同的结果,似乎目的地/没有效果。 我做了以下四个命令:

  • rsync -av src nslash ------------ src或dest
  • 上没有斜杠
  • rsync -av src dslash / ------------仅限Dest
  • rsync -av src / sslash ------------仅限src slash
  • rsync -av src / sdslash / ------------同时删除src和dest

结论:

  • 一旦src上有一个/,那么src的内容只会被复制到dest,无论dest是否有斜杠。
  • src上没有斜杠,然后src及其内容将被复制到dest。
  • 对dest的斜杠无效。

答案 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是正确的,与公认的答案相反。