rsync în Linux / Bash

Rețea și transfer date Rsync package

Sincronizează fișiere și directoare rapid, transferând doar blocurile modificate (transfer delta).

Sintaxă comandă
rsync [opțiuni] sursă destinație

Ce face rsync

Comanda rsync (remote sync) este instrumentul standard din industrie pentru copii de rezervă (backup), sincronizare de directoare și deploy pe servere de producție.

Algoritmul său inteligent compară fișierele de la sursă și destinație (după mărime și timestamp) și transferă prin rețea doar părțile care s-au schimbat efectiv, economisind timp și lățime de bandă.

Opțiuni și argumente

Opțiune / Parametru Descriere
-a, --archive Mod arhivă (echivalent cu -rlptgoD): păstrează recursivitatea, permisiunile, linkurile simbolice, proprietarul, grupul și timestamp-urile.
-v, --verbose Afișează detaliat numele fiecărui fișier sincronizat.
-z, --compress Comprimă datele în timpul transferului prin rețea.
-P Combină --progress (afișează bara de progres în timp real) cu --partial (permite reluarea transferului întrerupt).
--delete Șterge de la destinație fișierele care nu mai există la sursă (pentru o oglindă 1:1 perfectă).
-n, --dry-run Mod simulare: arată ce fișiere ar fi transferate sau șterse FĂRĂ a face vreo modificare reală pe disc.

Exemple

Exemplul 1: Sincronizarea locală a două directoare

Creăm o copie fidelă a fișierelor de proiect.

mkdir -p proiect_sursa backup_destinatie
echo "v1" > proiect_sursa/cod.py
rsync -av proiect_sursa/ backup_destinatie/ | grep "cod.py"

Rezultat

cod.py

Exemplul 2: Deploy pe server cu excluderea fișierelor inutile

Sincronizăm proiectul ocolind folderele locale de cache și git.

rsync -avzP --exclude='.git' --exclude='node_modules' ./ user@server:/var/www/app/

Ieșire în terminal

sending incremental file list
app.js
      2,450 100%    2.34MB/s    0:00:00 (xfr#1, to-chk=4/12)
index.html
      4,120 100%    3.93MB/s    0:00:00 (xfr#2, to-chk=3/12)

sent 3,210 bytes  received 70 bytes  6,560.00 bytes/sec
total size is 6,570  speedup is 2.00

Greșeli frecvente

  • Slash-ul final la sursă: rsync -a folder/ dest/ copiază CONȚINUTUL din interiorul folderului, în timp ce rsync -a folder dest/ creează folderul însuși în destinație (rezultând dest/folder/).
  • Rularea --delete fără o simulare prealabilă --dry-run (poate șterge fișiere prețioase de pe server dacă ai greșit calea sursă).

Comenzi înrudite

  • scp: Copiază fișiere în mod securizat între mașini diferite prin tunel criptat SSH.
  • cp: Copiază fișiere și directoare de la o locație sursă către o destinație.
  • tar: Împachetează mai multe fișiere într-o singură arhivă (tarball) și o comprimă opțional cu gzip sau bzip2.