Czy rsync domyślnie usuwa pliki, foldery w miejscu docelowym?

44

Akta

Załóżmy, że /foo/srczawiera tylko A.ci /foo/destzawiera zarówno A.ci B.c. Przypuśćmy, że uruchomię następujące polecenie:

rsync /foo/src/ /foo/dest

Będzie rsyncwymazać B.c?

Lornetka składana

Załóżmy teraz, że /foo/srczawiera katalog Az niektórymi plikami i /foo/destzawiera zarówno katalogi, jak Ai Bkażdy z plikami w sobie. Przypuśćmy, że uruchomię następujące polecenie (opcja -a obejmuje -r, rekurencyjne):

rsync -a /foo/src/ /foo/dest

Będzie rsyncwymazać Bi jego zawartość?

Crowder
źródło
Potrzebujesz --deleteprzełącznika.
fideli

Odpowiedzi:

51

Domyślnie rsync nie usuwa plików, ale zależy to od określonych opcji poleceń. Jeśli chcesz usunąć pliki, możesz użyć dowolnego z poniższych:

  • −−del (alias dla −−delete − during)
  • −−delete (usuwa zbędne pliki z katalogów dest)
  • −−delete − before (odbiornik usuwa się przed xfer [domyślnie])
  • −−delete − during (odbiornik usuwa się podczas xfer, nie wcześniej)
  • −−delete − after (odbiornik usuwa po xfer, nie wcześniej)
  • −−delete − wykluczone (usuń również wykluczone pliki z katalogów dest)
  • −−max − delete = NUM ​​(nie usuwaj więcej niż NUM plików)

Ponieważ specjalnie wybrałeś opcję -a , oto, co mówi strona podręcznika

−a, −−archive >

Jest to równoważne z −rlptgoD . Jest to szybki sposób na powiedzenie, że chcesz rekurencji i chcesz zachować prawie wszystko (z -H jest zauważalnym pominięciem). Jedyny wyjątek od powyższej równoważności występuje, gdy podano −−files − from , w którym to przypadku −r nie jest sugerowane.

Zauważ, że −a nie zachowuje twardych dowiązań , ponieważ znalezienie wielokrotnie połączonych plików jest kosztowne. Musisz osobno określić -H .

Wygląda więc na to, że odpowiedź na twoje pytanie brzmi NIE, nie zostanie usunięta, biorąc pod uwagę twoje przykłady.
HTH

SaxDaddy
źródło