Pytanie Ukośniki i komenda rsync


Próbuję zrobić coś podobnego, jak to, o co pytamy w tym pytaniu: RSync: Jak mogę synchronizować w obu kierunkach?

Jednak nie mogę dowiedzieć się, czy powinienem dodać ukośniki na końcu ścieżki pliku. Zasadniczo próbuję utworzyć polecenie alias, który synchronizuje zawartość dwóch katalogów, które mają tę samą nazwę, ale są na dwóch różnych serwerach. To, czego nie chcę, to kopiowanie jednego katalogu do drugiego (co, jak mi wiadomo, jest możliwe w zależności od tego, jak ukośne są na końcu).

Obecnie mam:

alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory/'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory/'

Co staram się osiągnąć, czy na końcu obu ścieżek pliku powinny znajdować się ukośniki?

Z góry dziękuję za pomoc.


14
2017-07-07 19:54


pochodzenie




Odpowiedzi:


Jest to opisane w rsync(1) manpage.

Ukośny ukośnik na źródle zmienia to zachowanie, aby uniknąć tworzenia dodatkowego poziomu katalogu w miejscu docelowym. Możesz myśleć o   "skreślenie zawartości tego katalogu" w przeciwieństwie do "skopiuj katalog po nazwie", ale w obu przypadkach   atrybuty katalogu zawierającego są przenoszone do katalogu zawierającego w miejscu docelowym. Innymi słowy, każdy z następujących   polecenia ing kopiuje pliki w ten sam sposób, w tym ich ustawienie atrybutów / dest / foo:

rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

Co się tyczy miejsca przeznaczenia, nie sądzę, by miało to jakieś poważne konsekwencje. Istnieje różnica, jeśli źródłem jest plik, a miejsce docelowe nie istnieje - polecenie

rsync SRC DEST

zrobi kopię SRC nazywa DEST, natomiast

rsync SRC DEST/

utworzy katalog DEST i skopiuj SRC plik do tego.


19
2017-07-07 20:17



W will effectively rename the SRC to DEST, whereas, Myślę, że tak nie jest rename ale to cp? - Sanghyun Lee
@SanghyunLee, dobrze, dobry połów! - werkritter


zachowaj ukośniki na źródle i usuń je z miejsca docelowego. Lubię to:

alias syncDirectories1 = 'rsync -tvur name@host:/Users/me/directory/ /Users/me/directory'
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ name@host:/Users/me/directory'

3
2017-07-07 20:18





Miałem różne wyniki z zaakceptowanej odpowiedzi na Ubuntu 17.04, wydaje się, że cel / nie ma żadnego efektu. Wykonałem następujące cztery polecenia:

  • rsync -av src nslash ------------ brak ukośników w src lub dest
  • rsync -av src dslash / ------------ Przycinaj tylko na Dest
  • rsync -av src / sslash ------------ Slash tylko dla src
  • rsync -av src / sdslash / ------------ Slash na obu src i dest

Wnioski:

  • gdy na src pojawi się /, to zawartość dla src zostanie skopiowana do dest, bez względu na to, czy dest ma kreskę, czy nie.
  • bez ukośnika na src, a następnie src i jego zawartość zostaną skopiowane do dest.
  • Ukośniki w dest nie mają żadnego efektu.

1
2017-08-15 17:31