Widzę na stronie podręcznika rsync, że istnieje wiele delete
opcji, ale tak naprawdę nie rozumiem różnic między nimi. Jakie są różnice między tymi opcjami?
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during xfer, not before
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from dest dirs
--delete-before
jest opisany jako(default)
? Nie rozumiem, co(default)
to znaczy.man
stronie dlarsync version 3.1.2 protocol version 31
. Jednak przypuszczam, że wersja z cytowanym tekstem jest taka, że jeśli używasz--delete
zamiast--delete-WHEN
, to tak, jakbyś określił,--delete-WHEN
gdzieWHEN
domyślniebefore
.Odpowiedzi:
--del/--delete_during
: Usuwa pliki z docelowego katalogu podczas ich kopiowania (oszczędza pamięć w porównaniu do--delete-before
:--delete-before
wykonuje osobny skan w poszukiwaniu plików do usunięcia)--delete
: Usuwa pliki z katalogu docelowego, jeśli nie istnieją w katalogu źródłowym.--delete-before
: Usuń pliki z katalogu docelowego przed skopiowaniem pliku o tej samej nazwie z katalogu źródłowego--delete-during
: Usuń pliki w katalogu docelowym PODCZAS kopiowania pliku o tej samej nazwie z katalogu źródłowego--delete-delay
: Znak usuwa się podczas przesyłania, ale poczekaj, aż transfer zostanie zakończony--delete-after
: Odbiornik usuwa po przesłaniu, a nie przed ... Jeśli jakaś inna część rsync przeniosła dodatkowe pliki w inne miejsce, powinieneś tego chcieć--delete-delay
, ponieważ--delete-delay
decyduje o tym, co ma zostać usunięte w trakcie przesyłania, podczas gdy--delete-after
sprawdza katalog w poszukiwaniu plików które należy usunąć PO zakończeniu.--delete-excluded
: Usuwa pliki z katalogu docelowego, które są wyraźnie wykluczone z przesyłania z katalogu źródłowego.Chodzi o to, że rsync nie kopiuje, tylko archiwizuje. To ważne rozróżnienie. Przetwarzanie usuniętych / zmienionych plików ma kluczowe znaczenie, aw wielu przypadkach jest dopracowane.
W
--delete
szczególności flaga jest tą, którą wiele razy spieprzyłem. Wiele osób używa rsync do przenoszenia plików do pamięci o niskim priorytecie, a w tym przypadku chcesz, aby pliki, które przenosisz, nadal istniały w katalogu docelowym. Nie robi tego usuwanie:--delete
upewnij się, że po usunięciu pliku z katalogu źródłowego zostanie on TAKŻE usunięty z katalogu docelowego, aby miejsce docelowe nie zapełniło się śmieciami. Raz widział, jak facet wymazuje swoją kopię zapasową wkładając nowy dysk i nie wyłączając jego nocnego skryptu rsync. Skrypt zauważył, że katalog źródłowy jest teraz pusty, i usunął każdy plik w katalogu docelowym, aby pasowały.Większość innych opcji dotyczy przestrzeni lub wydajności. Gdy usuwasz pliki, ważne jest, aby upewnić się, że transfer się powiedzie, zanim cokolwiek zrobisz, ale jeśli twoje urządzenie jest zbyt małe, aby obsłużyć 2 kopie wszystkich informacji, musisz je usunąć w trakcie podróży itp. Jest to trochę zwariowany z powodu swojej długiej historii na wielu platformach: dodano pewne opcje, aby ludzie przyzwyczajeni do pewnych zachowań nie byli zdezorientowani.
źródło
delete-after
usuwa każdy plik pomiędzy synchronizacją, czy tylko po dublowaniu całego katalogu ? Wydawało mi się, żedelete-after
wystarcza na moje potrzeby, ale nie mam już miejsca na urządzeniu podczas tworzenia kopii zapasowej jednego z moich dysków.delete-during
nie zawsze temu zapobiegano space left on device
(w Linuksie).delete-before
Jest to więc jedyny gwarantowany sposób na uniknięcie go (na przykład podczas tworzenia kopii lustrzanej dysku, który jest prawie pełny, a dysk docelowy jest prawie pełny).Działają się dwie rzeczy:
Zarówno nadawca, jak i odbiorca mogą otrzymać polecenie usunięcia (nie jestem pewien, dlaczego to ma znaczenie). Kiedy więc rsync z jednego komputera łączy się z serwerem rsync po drugiej stronie, określa to, kto faktycznie wydaje polecenie usuwania.
Kiedy to się dzieje, jest dość łatwe ... wcześniej oznacza, że wszystkie pliki są usuwane, a NASTĘPNIE rsync kopiuje je. podczas gdy przegląda listę plików, usuwa je, gdy do nich dochodzi, a następnie oznacza, że czeka, aż wszystkie pliki zostaną przesłane, a następnie usunie stronę zdalną. Ma to znaczenie tylko wtedy, gdy transfer zostanie przerwany.
źródło
--delete-before
się usunąć tylko te pliki, które musiały zniknąć, nie wszystkie pliki! Ale wydaje mi się możliwe, że rsync usuwa wszystko, a następnie przesyła przez „nowe” (prawdopodobnie niezmienione) dane ...--remove-source-files
.Inną kwestią, o której warto wspomnieć, jest to, że jeśli twój katalog źródłowy kończy się
/*
, to rsync weźmie pod uwagę tylko te pliki, a nie sam katalog (a zatem brak plików, które chcesz usunąć w miejscu docelowym).Jeśli podasz opcję usuwania powyżej, ale rsync wygląda na to, że nie jest usuwana, sprawdź, czy nie przypadkowo globujesz i podajesz listę plików, gdy masz na myśli sam katalog.
źródło