rsync avec exclusions

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.
  • --delete rend 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/