rsync avec exclusions
Notes › _DIFFUSION › Linux cli scripts
rsync local distant, distant local via ssh + keys et fichiers à exclure
Voici un modèle simple pour faire “local → distant” ou “distant → local” via SSH avec clés, en excluant des fichiers/dossiers.
1) Préparer les clés (recommandé)
- Générez une paire côté client si besoin :
1
ssh-keygen -t ed25519 -C "rsync"
- Copiez la clé publique sur la machine distante (remplacez user/host) :
1
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
2) Local → distant (SSH)
1
2
3
4
rsync -avz --delete \
-e "ssh -i /chemin/vers/cle -p 22" \
--exclude-from="/chemin/vers/excludes.txt" \
/chemin/local/ user@host:/chemin/distant/
3) Distant → local (SSH)
1
2
3
4
rsync -avz --delete \
-e "ssh -i /chemin/vers/cle -p 22" \
--exclude-from="/chemin/vers/excludes.txt" \
user@host:/chemin/distant/ /chemin/local/
À savoir (important)
- Mets
/chemin/local/(avec slash final) pour copier le contenu du dossier, pas le dossier lui-même. --deleterend la cible “miroir” du source (attention : supprime côté cible les fichiers absents du source).
4) Fichier d’exclusion excludes.txt
Exemples courants (une règle par ligne) :
node_modules/
.git/
*.log
tmp/
cache/
secret*.env
Règles relatives au dossier source passé à rsync.
5) Mode “dry-run” (simulation)
Avant de lancer avec --delete :
1
2
3
4
rsync -avz --delete --dry-run \
-e "ssh -i /chemin/vers/cle -p 22" \
--exclude-from="/chemin/vers/excludes.txt" \
/chemin/local/ user@host:/chemin/distant/
6) Option “plus robuste” (reprise) (si besoin)
1
2
3
4
rsync -avzP --append-verify \
-e "ssh -i /chemin/vers/cle -p 22" \
--exclude-from="/chemin/vers/excludes.txt" \
/chemin/local/ user@host:/chemin/distant/
Voici les commandes rsync les plus utiles pour synchroniser en local ↔ distant via SSH avec clés, en ajoutant des exclusions. rsync fonctionne bien avec SSH pour chiffrer le transfert, et --exclude ou --exclude-from servent à ignorer des fichiers/répertoires.[^1][^2]
Préparer l’accès SSH par clé
Génère une clé sur la machine source si besoin, puis copie la clé publique sur le serveur distant :
1
2
ssh-keygen -t ed25519
ssh-copy-id user@serveur
Ensuite, teste la connexion :
1
ssh user@serveur
Une fois la clé installée, rsync pourra utiliser SSH sans mot de passe si l’authentification par clé est correcte.[^2]
Local vers distant
Commande de base :
1
rsync -avz -e ssh /chemin/local/ user@serveur:/chemin/distant/
Avec exclusions :
1
2
3
4
5
rsync -avz -e ssh \
--exclude '.git' \
--exclude '*.log' \
--exclude 'node_modules' \
/chemin/local/ user@serveur:/chemin/distant/
Le slash final sur la source est important si tu veux copier le contenu du dossier plutôt que le dossier lui-même.[^3][^1]
Distant vers local
Pour rapatrier des fichiers depuis le serveur :
1
rsync -avz -e ssh user@serveur:/chemin/distant/ /chemin/local/
Avec exclusions :
1
2
3
4
rsync -avz -e ssh \
--exclude '.cache' \
--exclude '*.tmp' \
user@serveur:/chemin/distant/ /chemin/local/
La logique est la même dans les deux sens : seul l’ordre source/destination change.[^4][^1]
Fichier d’exclusions
Si tu as beaucoup d’éléments à exclure, utilise un fichier :
1
rsync -avz -e ssh --exclude-from=excludes.txt /source/ user@serveur:/dest/
Exemple excludes.txt :
.git
node_modules
*.log
.cache
C’est plus propre que multiplier les --exclude quand la liste devient longue.[^1][^2]
Options utiles
-a: mode archive, garde permissions, dates, liens.-v: verbeux.-z: compression pendant le transfert.-e ssh: force l’usage de SSH.--delete: supprime côté destination ce qui n’existe plus côté source, à utiliser avec prudence.[^3][^1]
Exemple “miroir” :
1
2
3
4
rsync -avz --delete -e ssh \
--exclude '.git' \
--exclude '*.log' \
/source/ user@serveur:/backup/
Cas courant avec clé SSH
Si la connexion SSH fonctionne déjà avec ta clé, rsync n’a rien de spécial à ajouter : il réutilise simplement SSH via -e ssh.[^2][^1]
Tu peux aussi préciser le port si nécessaire :
1
rsync -avz -e "ssh -p 2222" /source/ user@serveur:/dest/