Commande rsync sous Linux : options | exemples d'utilisation

Si vous recopiez tout un dossier à chaque fois pour synchroniser deux serveurs, le volume transféré reste celui du dossier entier, même si un seul fichier a changé. La commande rsync, abréviation de remote sync, compare la source et la destination et ne transfère que les fichiers qui diffèrent ; elle fonctionne de la même façon entre des dossiers locaux et entre des serveurs reliés en SSH. Cet article présente l'utilisation de base, les options et des exemples des deux modes de connexion : SSH et démon rsync.
Les sorties de cet article viennent de rsync 3.2.7 sous AlmaLinux 9.8. S'il n'est pas installé, installez-le avec le gestionnaire de paquets.
# Famille RHEL
dnf -y install rsync
# Famille Debian
apt -y install rsync✅ Utilisation de base
La syntaxe de base est la suivante.
rsync -options Origine destinationComme avec la commande cp, on écrit d'abord la source, puis la destination. Avec une barre oblique [/] à la fin de la source, seul le contenu du dossier arrive dans la destination ; sans elle, c'est le dossier lui-même qui y est copié.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngSi vous relancez la même commande, la liste des fichiers est vide et les octets envoyés (sent) tombent à quelques centaines : les fichiers de même taille et de même date de modification sont ignorés.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Avec -r seul, sans -a, les dates de modification ne sont pas conservées, et l'exécution suivante renvoie les mêmes fichiers. Pour synchroniser des dossiers, ajoutez -a par défaut.
L'option -n affiche seulement les fichiers qui changeraient, sans rien transférer, et [(DRY RUN)] apparaît à la fin du résultat. Les options qui suppriment des fichiers de la destination, comme --delete, se vérifient d'abord avec -n avant d'être exécutées.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Options de la commande rsync & simulateur
| Option | Description | |
|---|---|---|
| -a | --archiveCopie aussi les sous-répertoires en conservant droits, propriétaire, date de modification et liens symboliques (équivaut à -rlptgoD) | |
| -v | --verboseAffiche le nom des fichiers transférés et le volume transféré | |
| -z | --compressCompresse les données des fichiers pendant le transfert | |
| -r | --recursiveCopie aussi les sous-répertoires (inclus dans -a) | |
| -t | --timesConserve la date de modification (inclus dans -a). C'est sur elle que se décide quels fichiers sont ignorés à l'exécution suivante | |
| -n | --dry-runAffiche seulement les fichiers qui changeraient, sans transfert, et marque la fin avec (DRY RUN) | |
| -u | --updateIgnore les fichiers plus récents côté destination | |
| -h | --human-readableAffiche les nombres d'octets en K, M et G | |
| -P | Équivaut à --partial --progress. Affiche la progression de chaque fichier et reprend les transferts interrompus | |
| -i | --itemize-changesAffiche par des symboles ce qui a changé pour chaque fichier>f+++++++++ nouveau fichier · >f.st...... taille et date modifiées · *deleting supprimé | |
| -e | --rsh=COMMANDIndique le shell distant-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Supprime de la destination les fichiers absents de la source (nécessite -r ou -a) | |
| --exclude=PATTERN | Exclut les fichiers et répertoires qui correspondent au motif--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Placé avant --exclude, retire seulement ce motif de l'exclusion | |
| --max-size=SIZE | Ne transfère pas les fichiers plus gros que la taille indiquée (--min-size pour les plus petits)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Limite la vitesse de transfert, en KiB/s | |
| --stats | Affiche les statistiques du nombre de fichiers et du volume transféré |
✅ Modes de connexion : SSH et démon rsync
Pour synchroniser avec un serveur distant, il existe deux modes de connexion. Un seul deux-points [:] après l'hôte passe par SSH ; deux deux-points [::] se connectent directement au démon rsync sur le port 873.
| Type | Par SSH (:) | Par le démon rsync (::) |
|---|---|---|
| Syntaxe | rsync -options user@host:/chemin /chemin/local | rsync -options host::module/chemin /chemin/local |
| Port | Port SSH (22 par défaut) | 873 |
| Chiffrement | Chiffré par SSH | Aucun chiffrement |
| Authentification | Clé SSH ou mot de passe | hosts allow dans rsyncd.conf, compte et mot de passe en option |
| Configuration côté serveur | Aucune (fonctionne dès que l'accès SSH est possible) | Installer rsync-daemon, /etc/rsyncd.conf, ouvrir le port 873 |
| Usage | Sauvegarde et déploiement entre serveurs (choix par défaut) | Miroir sur le réseau interne sans donner de compte SSH |
🔲 Par SSH
Si le serveur est accessible en SSH, vous pouvez utiliser rsync tout de suite, sans configuration côté serveur. Avec un autre port ou un fichier de clé, placez la commande ssh telle quelle dans l'option -e.
# local → distant
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# distant → local
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# Port SSH et fichier de clé
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Pour exclure certains fichiers ou répertoires, ajoutez un --exclude par motif, ou regroupez les motifs entre accolades en une seule fois.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Par le démon rsync
Le démon rsync autorise l'accès par module sur le port 873 sans compte SSH. La communication n'est pas chiffrée : on l'utilise donc entre serveurs d'un même réseau interne.
Sous AlmaLinux 9, installez le paquet rsync-daemon et démarrez le service. Sur un serveur qui utilise firewalld, ouvrez le port 873 ; sur un serveur cloud, ouvrez-le dans le pare-feu de la console. La méthode xinetd utilisée jusqu'à RHEL 8 a disparu dans la version 9.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadDans le fichier de configuration [/etc/rsyncd.conf], indiquez le nom du module, son chemin et les hôtes autorisés. Avec read only à yes, les clients distants ne peuvent que télécharger.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Côté distant, si vous n'écrivez que deux deux-points après l'hôte, la liste des modules s'affiche ; avec le nom du module, c'est la liste des fichiers qu'il contient.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataLa copie se fait au format [hôte::module/chemin]. --delete supprime de la destination les fichiers absents de la source, et --include retire de l'exclusion seulement les éléments placés avant --exclude.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

Sur un serveur où SELinux est actif, l'accès au chemin du module peut être bloqué avec [Permission denied (13)]. Pendant le test, cela a fonctionné après avoir désactivé SELinux avec [setenforce 0].
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit limite la vitesse de transfert en KiB/s, et -P affiche en plus la progression de chaque fichier. --max-size et --min-size ne transfèrent que les fichiers dans la plage de tailles indiquée.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.