rsync to narzędzie do synchronizacji plików i katalogów — lokalnie albo przez sieć. Jego supermoc to algorytm delta: zamiast kopiować wszystko od zera (jak cp czy scp), wysyła tylko te fragmenty, które faktycznie się zmieniły. Dzięki temu drugie i kolejne kopiowanie dużego katalogu trwa sekundy zamiast minut. Używasz go do backupów, deployu na serwer, migracji danych i wszędzie tam, gdzie chcesz, żeby cel był wierną kopią źródła — bez przesyłania tego, co już tam jest.
Składnia i najważniejsze opcje
Podstawowa forma to rsync [OPCJE] ŹRÓDŁO CEL. Cel może być lokalny albo zdalny w formacie user@host:/ścieżka.
-a— tryb archiwum, czyli skrót na-rlptgoD(rekursja + zachowanie symlinków, uprawnień, czasów, właściciela i grupy). To domyślny wybór do backupów.-v— gadatliwość; pokazuje, które pliki lecą. Dasz-vvdla większej ilości szczegółów.-z— kompresja danych w locie. Sens ma przy transferze przez sieć, nie przy kopiowaniu na dysku obok.-P— skrót na--partial --progress: pasek postępu plus zachowanie częściowo wgranych plików, żeby wznowić przerwany transfer.--delete— kasuje na celu pliki, których nie ma już w źródle (prawdziwe lustro). Ostrożnie z tą flagą.-n(--dry-run) — próba na sucho: pokazuje, co by zrobił, ale nic nie rusza. Twój pas bezpieczeństwa.-e ssh— wskazuje protokół zdalny; przy SSH możesz tu wcisnąć np. niestandardowy port.--exclude=WZORZEC— pomija pasujące pliki/katalogi, np.--exclude='node_modules'.
Przykłady użycia
rsync -avh /home/dane/ /mnt/backup/dane/— lokalny backup katalogu z czytelnymi rozmiarami (-h).rsync -avz -e ssh ./projekt/ user@serwer:/var/www/projekt/— deploy katalogu na zdalny serwer przez SSH z kompresją.rsync -avP --delete ./strona/ user@serwer:/var/www/strona/— pełne lustro: cel staje się dokładną kopią źródła, z paskiem postępu.rsync -avn ./src/ ./kopia/— próba na sucho, żeby zobaczyć, co się zmieni, zanim odpalisz to naprawdę.rsync -avz --exclude='.git' --exclude='node_modules' ./app/ user@serwer:/srv/app/— wysyłka aplikacji bez śmieci deweloperskich.
Częste błędy i pułapki
Numer jeden: ukośnik na końcu źródła. rsync -a /dane/ /backup/ kopiuje zawartość katalogu dane do /backup, a rsync -a /dane /backup/ tworzy /backup/dane. Jeden znak decyduje, czy zagnieździsz katalog, czy nie. Na celu ukośnik nie ma znaczenia.
Pułapka druga: --delete w parze ze złą ścieżką źródła potrafi wyczyścić cel ze wszystkiego. Zawsze najpierw odpal to z -n. Pamiętaj też, że rsync rzadko bywa preinstalowany — na świeżym serwerze doinstalujesz go z pakietu rsync. Wersja z macOS bywa starsza niż na Linuksie, więc co nowsze flagi mogą nie działać po obu stronach.
Powiązane komendy: cp, scp, tar, ssh.