rsync synchronise les fichiers et évite les retransferts inutiles, généralement en comparant taille et date de modification. La préservation des permissions, dates et liens symboliques est demandée par -a ; ce n’est pas le comportement par défaut. -a n’inclut pas les ACL, attributs étendus ni liens physiques (-A, -X, -H).
Syntaxe
rsync [options] SOURCE DESTINATION
rsync -av /src/ /dst/ # local
rsync -av /src/ user@hote:/dst/ # via SSH (rsync utilise ssh par defaut)
rsync -av --delete --dry-run /src/ /dst/ # simulation, montre ce qui serait fait
Options essentielles
| -a | « Archive » : équivalent de -rlptgoD. Récursif, préserve permissions, dates, propriétaires, liens. À mettre dans 95 % des cas. |
| -v | Verbeux : liste les fichiers transférés. |
| --delete | Supprime côté destination les fichiers absents de la source. Pour un vrai miroir. |
| --dry-run / -n | Simulation : montre ce qui serait fait, sans rien copier ni effacer. Indispensable avec --delete. |
| -z | Compresse pendant le transfert. Utile sur lien lent, inutile en local ou sur réseau rapide. |
| --progress | Affiche la progression de chaque fichier. Couplé à -v donne une bonne visibilité. |
| --exclude=PAT | Exclut les fichiers correspondant. Répétable. --exclude-from=fichier pour une liste. |
$ rsync -av --delete --dry-run ~/projets/ /mnt/backup/projets/
Simulation d'un miroir : on voit ce qui serait copié et ce qui serait supprimé côté backup. Toujours faire un --dry-run avant un --delete, sinon on risque d'effacer des fichiers qu'on voulait garder.
$ rsync -av --delete ~/projets/ /mnt/backup/projets/
La même chose, pour de vrai. Le slash final sur la source compte : avec ~/projets/, on copie le contenu, sans le slash on copierait le dossier projets à l'intérieur de la destination (créant /mnt/backup/projets/projets/).
$ rsync -avz --progress -e "ssh -p 2222" /var/www/ deploy@web:/srv/site/
Déploiement à travers SSH avec compression et barre de progression. -e "ssh -p 2222" permet de spécifier des options SSH (ici un port non standard).
$ rsync -av --exclude='node_modules' --exclude='.git' /src/ user@host:/dst/
Backup d'un projet en excluant les répertoires lourds qu'on peut reconstituer (dépendances, historique git si déjà sauvegardé ailleurs).
Le slash final est lourd de sens.
rsync src/ dst/ copie le contenu de src dans dst. rsync src dst/ copie le dossier src dans dst (donc crée dst/src/). À tester avec --dry-run en cas de doute.
Voir aussi :
cp ssh scp tar