Znajduję wiele odpowiedzi na to pytanie, więc chciałem zapytać ludzi, którzy faktycznie z niego korzystają, a nie tylko założyć największy blog, wypełniając losowe, częściowo bezużyteczne informacje.
Scenariusz: ja
rsync -av --progress /dir/a /dir/b
i robi swoje.
Dodaję nowe pliki do / dir / a i ponownie uruchamiam to samo polecenie, wie, co zrobił i kopiuje tylko nowe pliki.
Dodam nowe pliki do / dir / a i zmieniam nazwy niektórych plików w / dir / b, a może też usunę kilka.
Jeśli uruchomię rsync -av --progress /dir/a /dir/b
ponownie, co zostanie skopiowane? Tylko nowe pliki, ponieważ wie, co wcześniej skopiował, lub pliki, których nazwy zmieniono / usunięto, ponieważ już ich nie ma.
A jeśli dodatkowo skopiowane wcześniej pliki zostaną ponownie skopiowane, czy można temu zapobiec, aby kopiowane były tylko nowe dodatki do katalogu / dir / a?
W tej chwili z przyjemnością sprawdzam rzeczy ręcznie, ale w miarę powiększania się danych potrzebuję więcej automatyzacji, aby wykonać to zadanie.
-i
Flaga jest bardzo poręczny. Dla każdego pliku daje ciąg pasujący, który można zdekodować, aby zobaczyć, dlaczego pasuje (flaga dla czasu mod, flaga dla rozmiaru itp.)Odpowiedzi:
Nie, nie wie, co zrobił w poprzednim uruchomieniu. Porównuje dane po stronie odbierającej z danymi do wysłania. Przy wystarczająco małych danych nie będzie to oczywiste, ale gdy masz wystarczająco duże katalogi, łatwo jest wyczuć czas poświęcony na porównanie przed rozpoczęciem kopiowania.
Domyślnie sprawdzane są czasy i rozmiary modyfikacji plików. Od
man rsync
:I:
Pamiętaj, że nie wynika to z użytych opcji.
-a
jest:źródło
--fuzzy
raz rozpozna je jako takie same w tym samym katalogu.--fuzzy
Dwukrotne użycie rozszerza tę zdolność do innych lokalizacji. Zobaczman rsync
szczegóły. Oczywiście jednym z głównych powodów używaniarsync
jest możliwość kopiowania tylko tych części pliku, które uległy zmianie. Może to znacznie przyspieszyć przesyłanie danych przez sieć. BTW, opcja sumy kontrolnej jest wspomniana powyżej w celu wyjaśnienia, jakrsync
działa. W większości przypadków nie należy go używać.Generał
Jeśli dobrze rozumiem,
rsync -av
nie ma pamięci, więc skopiuje również pliki, których nazwy zostały zmienione / usunięte, ponieważ są one obecne w źródle, ale nie są już obecne w celu.Porady
Użyj opcji
-n
„bieg próbny”, aby sprawdzić, co się stanie przed uruchomieniemrsync
wiersza polecenia.Zwróć uwagę na specjalne znaczenie końcowego ukośnika po katalogu źródłowym i zauważ różnicę między
i
który jest opisany w instrukcji
man rsync
.Przykład
Specjalny przypadek (dodanie pliku do katalogu źródłowego „a” i usunięcie pliku z katalogu docelowego „b”) spowoduje dodanie zarówno dodanego pliku, jak i wcześniej skopiowanego pliku, ponieważ nadal znajduje się on w katalogu źródłowym. Stanie się tak zarówno z opcją, jak i bez niej,
-u
i nie znam żadnej opcji,rsync
aby to łatwo naprawić, jeśli chcesz zachować ją w katalogu źródłowym.Ale możesz usunąć go z katalogu źródłowego lub umieścić nazwę pliku w pliku
excluded
i użyć opcji--exclude-from=excluded
(dla wielu plików) lub po prostu--exclude=PATTERN
dla jednego lub kilku plików.Alternatywny:
unison
Możesz przetestować narzędzie
unison
, które jest narzędziem synchronizującym . Zapewnia wizualną metodę identyfikacji specjalnych przypadków i decydowania o tym, co robić. Istnieje wersja GUI (unison-gtk
).źródło
unison-gtk
od kilku lat i jestem z tego zadowolony. (Jarsync
też używam .)Kopiuje tylko nowe pliki w katalogu / dir / a. Cokolwiek zrobisz w / dir / b, zostanie zignorowane, chyba że użyjesz opcji --delete. W takim przypadku pliki o zmienionej nazwie w katalogu / dir / b zostaną usunięte. Zmusi / dir / b, aby stał się dokładnie jak / dir / a.
Jeśli chodzi o premię, masz na myśli jak w przypadku zmiany nazwy plików w / dir / a, a następnie rsynchronizacji do / dir / b? Nie sądzę, że istnieje sposób, aby zapobiec rsync po prostu kopiowaniu plików w tym przypadku.
źródło