Po co dodawać końcowy ukośnik po miejscu docelowym rsync?

13

Według tej strony dodanie „/” na końcu miejsca docelowego rsync daje inny wynik niż brak dodawania.

Próbowałem to przetestować, ale nie mogę tego zweryfikować:

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

dir2:
file

dir3:
file

Czy dodanie znaku „/” do miejsca docelowego ma czasem zastosowanie?

EmmaV
źródło
Czy odnosi się do tej części strony człowieka: A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.? Jeśli tak, zwróć uwagę, że twoje polecenie wcale nie jest podobne do tego z przykładu podanego na stronie man.
jesse_b
@Jesse_b Twój komentarz mnie zaskakuje ... „Gdy używasz„ / ”na końcu miejsca docelowego, rsync wklei dane do ostatniego folderu. Gdy nie używasz„ / ”na końcu miejsca docelowego, rsync utworzy folder z ostatnia nazwa folderu docelowego i wklej dane do tego folderu. ”
Hauke ​​Laging
@HaukeLaging Jestem zdezorientowany, co jest zaskakujące? Ta szczególna sekcja odnosi się również do końcowego ukośnika znajdującego się w źródle. Więc jeśli nie rsync -r dir1/subdir1 dir2/będzie skopiować zawartość subdir1do dir2ale jeśli nie rsync -r dir1/subdir1/ dir2/będzie skopiowanie całego katalogu (wraz z zawartością) subdir1w dir2tak trzeba./dir2/subdir1/
jesse_b
@Jesse_b Nie zauważyłem „człowieka” w pierwszym komentarzu. Zupełnie oczywiste, że OP nie odnosi się do strony man, ale do strony, którą podlinkował.
Hauke ​​Laging
@HaukeLaging Oh duh, nawet tego nie widziałem. Myślę, że przeskakiwałem zbyt szybko i czytałem to jako „Według strony podręcznika”.
jesse_b

Odpowiedzi:

28

To robi różnicę, gdy źródłem jest plik, a katalog docelowy nie istnieje. Na przykład weź plik o nazwie filejako źródło:

  • $ rsync file dest/utworzy kopię filewewnątrz katalogu dest, natomiast
  • $ rsync file destutworzy kopię pliku o filenazwiedest

Aby dodać (z komentarzy); jeśli katalog destjuż istnieje, kopia filezostanie utworzona destw obu powyższych przypadkach.

Podstawowy przykład:

~/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
źródło
1
Dziękuję Ci. Więc jeśli katalog destjuż istnieje, nie ma potrzeby używania ukośnika końcowego?
EmmaV,
Dokładnie. Jeśli w powyższym przykładzie destistnieje katalog , kopia filezostanie utworzona w obu przypadkach.
resc