斜杠和 rsync 命令

问题描述 投票:0回答:5

我正在尝试做与此问题中所问的相同的事情:如何在两个方向上同步?

但是,我不知道是否应该在文件路径末尾添加斜杠。基本上我正在尝试创建一个别名命令来同步两个同名但位于两个不同服务器上的目录的内容。我不想要的是将一个目录复制到另一个目录中(我知道这是一种可能性,具体取决于末尾的斜杠是如何完成的)。

我目前拥有的是:

alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory/'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory/'

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

linux directory rsync
5个回答
104
投票

它在

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/

31
投票

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


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'

6
投票

我的结果与 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

结论:

  • 一旦 src 上有 /,那么无论 dest 是否有斜杠,都只会将 src 的内容复制到 dest。
  • src 上没有斜线,那么 src 及其内容将被复制到 dest。
  • 对目标进行斜杠没有效果。

0
投票

实验设置:

rm -r *; mkdir -p src/content dst; tree
.
├── dst
└── src
    └── content
命令变体
find dst -name content
rsync -a src dst
dst/src/content
rsync -a src/ dst
dst/content
© www.soinside.com 2019 - 2024. All rights reserved.