Przeczytałem te wątki:
- rsync --delete --files-from = list / dest / nie usuwa niechcianych plików
- Usunąć zbędne pliki z katalogu docelowego przez rsync?
Ale, o ile mogę powiedzieć (może coś mi brakuje), nie obejmują one następującego pytania:
Jak poprosić rsync
o skopiowanie plików i usunięcie tych po stronie odbiorczej, które nie istnieją po stronie wysyłającej, z wyjątkami? (np. nie usuwaj repozytorium rtęci .hg
po stronie odbierającej, nawet jeśli nie ma repozytorium po stronie wysyłającej).
Jedna możliwość?
Pożyczanie od odpowiedzi @Richard Holloway poniżej. Powiedz, że mam następujący wiersz:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
O ile rozumiem, ten wiersz spowodowałby rsync
usunięcie wszystkiego na ścieżce odbiorczej, która nie istnieje na ścieżce wysyłającej, z wyjątkiem tych pasujących dont_delete_me
. Moje pytanie brzmi: czy rsync zachowa pliki po stronie odbierającej, które są dopasowane, dont_delete_me
nawet jeśli nic po stronie wysyłającej nie pasuje dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
czy nie spowodowałoby torsync
usunięcia wszystkiego na ścieżce odbiorczej, która nie istnieje na ścieżce wysyłającej, z wyjątkiem rzeczy pasującychdont_delete_me
? Co najważniejsze, czyrsync
rzeczy po stronie odbiorcy byłyby dopasowane,dont_delete_me
nawet jeśli nic po stronie wysyłającej nie pasujedont_delete_me
? Jeśli tak jest, myślę, że to jedyna linia, której potrzebuję, prawda?--delete
, chyba że wyraźnie to określisz--delete-excluded
. Zobacz opis--delete
iw--delete-excluded
podręczniku rsync.Odkryłem, że następujące rozwiązanie działa dla moich celów:
(Uwaga: Dodaj
-n
opcję wykonania suchego biegu i nie zmieniaj--delete
na--delete-excluded
!)Uruchomienie polecenia powoduje następujące właściwości:
src
pozostaje niezmodyfikowanydest
Folder docelowy pasuje do folderu źródłowego, z tą różnicą, że:do_not_send_to_dest
liście nie są wysyłane do miejsca docelowego, orazdo_not_modify_in_dest
liście pozostają niezmodyfikowane w miejscu docelowym.do_not_
plików „ ”).Wyjaśnienie
--delete
Wydaje mi się, że kiedy rsync odczytuje argumenty wiersza poleceń od lewej do prawej, wydaje się , że argument ten powoduje, że rsync wewnętrznie „przełącza tryby” (w pewnym sensie), umożliwiając--exclude-from
ponowne użycie opcji ponownie, ale o innym znaczeniu.Zastrzeżenie:
Jeśli element na
do_not_send_to_dest
liście już istnieje w miejscu docelowym, to:--delete
na--delete-excluded
spowoduje usunięcie wszystkiego w miejscu docelowym wymienionym na jednej z dwóch list. xD (Być może rsync został napisany jako otwarty / elastyczny, ale ma pewne niuanse?)Lekko przetestowane pod kątem użytkowania.
Używam „
rsync version 3.0.9 protocol version 30
”.źródło