我正在尝试做与此问题中所问的相同的事情:如何在两个方向上同步?
但是,我不知道是否应该在文件路径末尾添加斜杠。基本上我正在尝试创建一个别名命令来同步两个同名但位于两个不同服务器上的目录的内容。我不想要的是将一个目录复制到另一个目录中(我知道这是一种可能性,具体取决于末尾的斜杠是如何完成的)。
我目前拥有的是:
alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory/'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory/'
对于我想要完成的任务,两个文件路径的末尾都应该有斜杠吗?
rsync(1)
手册页中进行了描述:
源上的尾部斜杠会更改此行为,以避免在目标上创建额外的目录级别。你可以想一个 源上尾随
的意思是“复制此目录的内容”,而不是“按名称复制目录”,但在这两种情况下 包含目录的属性将传输到目标上的包含目录。换句话说,以下每个命令都以相同的方式复制文件,包括它们对/
属性的设置:/dest/foo
rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
至于目的地,我认为不会有什么重大后果。如果源是文件而目标不存在,则会有区别 — 这将创建
SRC
的副本,称为 DEST
:
rsync SRC DEST
,然而,这将创建目录
DEST
并将 SRC
文件复制到其中:
rsync SRC DEST/
我在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 是正确的,与公认的答案相反。
保留源上的斜杠,并将其从目标中删除。 像这样:
alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory'
我的结果与 Ubuntu 17.04 上接受的答案不同。看来目的地 / 没有效果。 我执行了以下四个命令:
rsync -av src nslash # No slashes on either src or dest
rsync -av src dslash/ # Slash on Dest only
rsync -av src/ sslash # Slash on src only
rsync -av src/ sdslash/ # Slash on both src and dest
结论:
实验设置:
rm -r *; mkdir -p src/content dst; tree
.
├── dst
└── src
└── content
命令变体 |
|
---|---|
|
|
|
|