Perché aggiungere una barra finale dopo una destinazione rsync?


13

Secondo questa pagina Web, l'aggiunta di '/' alla fine di una destinazione rsync produce un risultato diverso dal non aggiungerlo.

Ho provato a provare questo, ma non riesco a verificarlo:

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

dir2:
file

dir3:
file

L'aggiunta di un '/' alla destinazione può effettivamente essere utile a volte?


Si riferisce a questa parte della pagina man: A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.? In tal caso, tieni presente che il tuo comando non è affatto simile a quello nell'esempio riportato nella pagina man.
jesse_b,

@Jesse_b Il tuo commento mi sorprende ... "Quando si utilizza" / "alla fine della destinazione, rsync incollerà i dati all'interno dell'ultima cartella. Quando non si utilizza" / "alla fine della destinazione, rsync creerà una cartella con l'ultimo nome della cartella di destinazione e incolla i dati all'interno di quella cartella. "
Hauke ​​Laging,

@HaukeLaging Sono confuso, cosa sorprende? Questa particolare sezione si riferisce anche alla barra finale sulla sorgente. Quindi se lo facessi rsync -r dir1/subdir1 dir2/copierà il contenuto di subdir1in dir2ma se lo facessi rsync -r dir1/subdir1/ dir2/copierà l'intera directory (compresi i contenuti) subdir1in dir2modo da avere./dir2/subdir1/
jesse_b

@Jesse_b Non ho notato "l'uomo" nel tuo primo commento. Ovviamente l'OP non si riferisce alla pagina man ma alla pagina che ha collegato.
Hauke ​​Laging,

@HaukeLaging Oh duh, non l'ho nemmeno visto. Penso che stavo scremando troppo velocemente e l'ho letto come "Secondo la pagina man".
jesse_b,

Risposte:


28

Fa la differenza quando l'origine è un file e la directory di destinazione non esiste. Ad esempio prendere un file chiamato filecome sorgente:

  • $ rsync file dest/creerà una copia fileall'interno di una directory dest, mentre
  • $ rsync file destfarà una copia del file filechiamatodest

Aggiungere (dai commenti); se destesiste già una directory , una copia fileverrà creata destin entrambi i casi sopra.

Esempio di base:

~/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
Grazie. Quindi se la directory destesiste già, non c'è bisogno della barra finale?
EmmaV,

Esattamente. Se nell'esempio sopra destesiste una directory , filein entrambi i casi verrà creata una copia di
salva il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.