为什么要在rsync目标后面添加斜杠?


13

根据网页,在rsync目标的末尾添加“ /”会产生与未添加结果不同的结果。

我已经尝试过测试,但是无法验证:

$ mkdir dir{1..3}
$ touch dir1/file
$ rsync -r dir1/ dir2
$ rsync -r dir1/ dir3/
$ ls dir*
dir1:
file

dir2:
file

dir3:
file

有时将'/'附加到目的地实际上有用途吗?


您是指手册页的以下部分A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.吗?如果是这样,请注意您的命令与手册页中给出的示例完全不同。
jesse_b

@Jesse_b您的评论确实让我感到惊讶...“在目标末尾使用“ /”时,rsync会将数据粘贴到最后一个文件夹中。当在目标末尾不使用“ /”时,rsync将使用以下命令创建一个文件夹最后一个目标文件夹名称,然后将数据粘贴到该文件夹​​中。”
Hauke Laging,

@HaukeLaging我很困惑,令人惊讶的是什么?此特定部分还指代源末尾有斜杠。所以,如果你是rsync -r dir1/subdir1 dir2/会的内容复制subdir1dir2,但如果你没有rsync -r dir1/subdir1/ dir2/它会复制整个目录(包括内容)subdir1进入dir2,所以你必须./dir2/subdir1/
jesse_b

@Jesse_b在您的第一条评论中,我没有注意到“男人”。很明显,OP并不是参考手册页而是他链接的页面。
Hauke Laging,

@HaukeLaging哦,呵呵,甚至都没有看到。我想我浏览的太快了,读为“根据手册页”。
jesse_b

Answers:


28

当源是文件而目标目录不存在时,确实会有所不同。例如,以一个名为filesource 的文件为例:

  • $ rsync file dest/file在一个目录中创建一个副本dest,而
  • $ rsync file dest将复制file名为dest

添加(从评论中);如果目录dest已经存在,filedest在上述两种情况下都将创建一个副本。

基本示例:

~/test > touch file
~/test > mkdir dest1
mkdir: created directory 'dest1'
~/test > tree
.
├── dest1
└── file

1 directory, 1 file
~/test > rsync file dest1
~/test > rsync file dest2
~/test > rsync file dest3/
~/test > tree
.
├── dest1
│   └── file
├── dest2
├── dest3
│   └── file
└── file

2 directories, 4 files
~/test >

1
谢谢。因此,如果目录dest已经存在,则不需要斜杠吗?
EmmaV

究竟。如果在上面的示例中dest存在目录,file则在两种情况下都将在其中创建一个副本。
resc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.