Pourquoi ajouter une barre oblique de fin après une destination rsync?

13

Selon cette page Web, ajouter «/» à la fin d'une destination rsync produit un résultat différent de ne pas l'ajouter.

J'ai essayé de tester cela, mais je ne peux pas le vérifier:

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

dir2:
file

dir3:
file

L'ajout d'un «/» à la destination a-t-il une utilité parfois?

EmmaV
la source
Faites - vous référence à cette partie de la page de manuel: A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.? Si c'est le cas, veuillez noter que votre commande n'est pas du tout similaire à celle de l'exemple donné dans la page de manuel.
jesse_b
@Jesse_b Votre commentaire me surprend ... "Lorsque vous utilisez" / "à la fin de la destination, rsync collera les données dans le dernier dossier. Lorsque vous n'utilisez pas" / "à la fin de la destination, rsync créera un dossier avec le dernier nom du dossier de destination et collez les données dans ce dossier. "
Hauke ​​Laging
@HaukeLaging Je suis confus, qu'est-ce qui est surprenant? Cette section particulière fait également référence à la barre oblique de fin se trouvant sur la source. Donc, si vous l'avez fait, rsync -r dir1/subdir1 dir2/il copiera le contenu de subdir1dans dir2mais si vous l'avez fait, rsync -r dir1/subdir1/ dir2/il copiera tout le répertoire (y compris le contenu) subdir1dans de dir2sorte que vous auriez./dir2/subdir1/
jesse_b
@Jesse_b Je n'ai pas remarqué "l'homme" dans ton premier commentaire. Il est évident que l'OP ne fait pas référence à la page de manuel mais à la page qu'il a liée.
Hauke ​​Laging
@HaukeLaging Oh duh, je n'ai même pas vu ça. Je pense que je parcourais trop vite et je l'ai lu comme "Selon la page de manuel".
jesse_b

Réponses:

28

Cela fait une différence lorsque la source est un fichier et que le répertoire de destination n'existe pas. Par exemple, prenez un fichier appelé filecomme source:

  • $ rsync file dest/va créer une copie de l' fileintérieur d'un répertoire dest, tandis que
  • $ rsync file destfera une copie du fichier fileappelédest

Pour ajouter (à partir des commentaires); si un répertoire destexiste déjà, une copie filesera créée destdans les deux cas ci-dessus.

Exemple de 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 >
resc
la source
1
Je vous remercie. Donc, si le répertoire destexiste déjà, il n'y a pas besoin de la barre oblique de fin?
EmmaV
Exactement. Si dans l'exemple ci-dessus un répertoire destexiste, une copie de filesera créée à l'intérieur dans les deux cas.
resc