Por que adicionar uma barra após um destino rsync?

13

De acordo com esta página da web, adicionar '/' ao final de um destino rsync produz um resultado diferente de não adicioná-lo.

Eu tentei testar isso, mas não posso verificar:

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

dir2:
file

dir3:
file

Às vezes, acrescentar um '/' ao destino é útil?

EmmaV
fonte
Você está se referindo a esta parte da página de manual A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.:? Nesse caso, observe como o seu comando não é nada parecido com o do exemplo dado na página de manual.
Jesse_b
@Jesse_b Seu comentário me surpreende ... "Ao usar" / "no final do destino, o rsync colará os dados na última pasta. Quando não estiver usando" / "no final do destino, o rsync criará uma pasta com o último nome da pasta de destino e cole os dados nessa pasta ".
Hauke ​​Laging 4/17/17
@HaukeLaging Estou confuso, o que é surpreendente? Esta seção específica também se refere à barra final na fonte. Então, se você se rsync -r dir1/subdir1 dir2/ele irá copiar o conteúdo de subdir1dentro dir2, mas se você fez rsync -r dir1/subdir1/ dir2/isso irá copiar o diretório inteiro (incluindo conteúdos) subdir1para dir2assim que você teria./dir2/subdir1/
jesse_b
@ Jesse_b Eu não notei o "homem" em seu primeiro comentário. Obviamente, o OP não se refere à página de manual, mas à página que ele vinculou.
Hauke ​​Laging 4/17/17
@HaukeLaging Oh duh, nem vi isso. Eu acho que estava deslizando rápido demais e li como "De acordo com a página de manual".
jesse_b

Respostas:

28

Faz diferença quando a origem é um arquivo e o diretório de destino não existe. Por exemplo, pegue um arquivo chamado filecomo fonte:

  • $ rsync file dest/criará uma cópia filedentro de um diretório dest, enquanto
  • $ rsync file destfará uma cópia do arquivo filechamadodest

Para adicionar (dos comentários); se um diretóriodest já existir, uma cópia fileserá criada destnos dois casos acima.

Exemplo básico:

~/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 >
socorro
fonte
1
Obrigado. Portanto, se o diretório destjá existe, não há necessidade da barra final?
EmmaV
Exatamente. Se, no exemplo acima, destexistir um diretório , uma cópia fileserá criada dentro dos dois casos.
rESC