Które polecenie rsync „inteligentnie” łączy dwa foldery?

39

Mam kilka folderów, które zostały przypadkowo zduplikowane i muszę je scalić. Powiedzmy, że folder A zawiera plik X, a folder B zawiera plik Y, chciałbym, aby plik X został skopiowany do folderu B. Ale oczywiście mogę napotkać bardziej złożone przypadki, w których zarówno folder A, jak i B zawierają ten sam plik X : w takich przypadkach chciałbym zachować najnowszą kopię pliku, więc rsync powinien porównać oba pliki, a jeśli pochodzenie jest starsze, po prostu pomiń, w przeciwnym razie miejsce docelowe jest starsze, zastąp.

Jakie parametry należy umieścić w wierszu polecenia rsync?

To właśnie znalazłem w Google, ale nie sądzę, aby było poprawne.

rsync -avz --ignore-existing src dest

Strona podręcznika jest jakoś poza mną.

Dziękuję Ci.

PS w przypadkach, w których plik istnieje w obu folderach, lepszym rozwiązaniem byłoby zastąpienie starszego pliku do folderu docelowego i jednoczesne zachowanie kopii starszej, tak jak kopii zapasowej na wypadek, gdybyś wrócił do poprzedni

Tiziano Solignani
źródło

Odpowiedzi:

66

Użyłbym:

rsync -abviuzP src/ dest/
  • -i włącza format wyszczególniony, który pokazuje więcej informacji niż format domyślny
  • -btworzy pliki kopii zapasowej rsync, które istnieją w obu folderach, dołączając ~je do starego pliku. Możesz kontrolować ten sufiks za pomocą--suffix .suf
  • -u powoduje, że rsync przesyła pliki pomijania, które są nowsze w dest niż w src
  • -z włącza kompresję, która jest przydatna podczas przesyłania łatwo kompresowalnych plików przez wolne łącza
  • -Pwłącza się --partiali--progress
  • --partial sprawia, że ​​rsync zachowuje częściowo przesłane pliki, jeśli transfer zostanie przerwany
  • --progress pokazuje pasek postępu dla każdego transferu, przydatne w przypadku przesyłania dużych plików
użytkownik49740
źródło
2
Naprawdę fajnie, skończyło się na tym, że użyłemrsync -abuP
qed