Commandes Linux : rsync

RSYNC

Installé avec le paquet rsync
Voir aussi : cp et scp

Rmq :

  • Contrairement à cp et scp, la commande rsync ne copie pas les fichiers de même nom, taille et mtime déjà présents sur la destination, ce qui permet, en cas de reprise de synchronisation ou de nouvelle synchronisation, de ne pas relancer la copie à zéro.
  • De plus, cp et scp ne permettent pas d’afficher la progression en pourcentage de la copie, contrairement à rsync.

 

Afficher la version de la commande rm

rsync --version

ou

apt-cache policy rsync

 

Options utiles

    -v : mode verbeux (affiche les fichiers copiés/supprimés etc.)
    -a : mode archive (équivaut à -rlptgoD)
    -l : préservation des liens symboliques
    -p : préservation des permissions
    -t : préservation de l’horodatage
    -g : préservation du groupe propriétaire
    -o : préservation de l’utilisateur propriétaire
    -D : préservation des fichiers de type bloc
    -H : préservation des liens physiques
    -A : préservation des ACL
    -X : préservation des attributs étendus
    -u : mode update
    -n : mode dry-run (simulation)
    -h : taille des fichiers human-readables
    -z : compression des données durant la synchronisation
    --delete : supprime les fichiers exclusifs de la destination
    --info=progress1 : affichage de la progression fichier par fichier
    --info=progress2 : affichage de la progression globale
    --backup : mode backup
    --backup-dir : dossier de backup (en mode backup)
    --stats : afficher un résumé détaillé en fin de copie

 

Synchroniser le contenu du dossier A vers le dossier B

rsync -Hav /pathtoA/ /pathtoB/

Proche de :
cp -a /pathtoA/* /pathtoB/
Au final, B est la fusion des fichiers de A et des fichiers exclusifs à B :

  • Les fichiers propres à A seront copiés sur B
  • Les fichiers propres à B seront conservés
  • Les fichiers de même nom sur B, même s’ils sont plus récents, seront écrasés

L’option -a (mode archive) équivaut à -rlptgoD :

    -r : mode récursif
    -l : préservation des liens symboliques
    -p : préservation des permissions
    -t : préservation de l’horodatage
    -g : préservation du groupe propriétaire
    -o : préservation de l’utilisateur propriétaire
    -D : préservation des fichiers de type bloc
rsync_syncatoba

Rmq :

  • La barre de progression ne s’affiche pas par défaut, voir l’option --info=progress1 pour une progression fichier par fichier ou --info=progress2 pour une progression globale.
  • Le slash final des noms de dossiers est important. En effet rsync dir1/ dir2/ n’a pas le même effet que rsync dir1 dir2/ :
    • La première commande copiera le contenu de dir1/ dans dans2/ : dir2/files
    • La deuxième commande copiera le dossier dir1/ dans dir2/ : dir2/dir1/files

ex :

# rsync -Hav source/ destination/
rsync2

 

Miroir de A vers B (mode delete)

rsync -Hav --delete /pathtoA/ /pathtoB/

Au final, B est l’image de A :

  • Tout ce qui est modifié sur A est copié vers B
  • Tout ce qui est modifié sur B, est remplacé par les fichiers de même nom de A
  • Les fichiers plus récents sur B sont remplacés par les fichiers de A, même antérieurs
  • Les fichiers propres à B sont supprimés
rsync_mirror

En mode miroir, avec l’option --delete, les fichiers exclusifs de B sont donc supprimés, même s’ils viennent d’une précédente synchronisation depuis A et qu’ils ont été depuis supprimés de A.

rsync -Hav --delete /pathtoA/ /pathtoB/ --backup --backup-dir=/pathtobackup/ 

Il est possible de sauvegarder les fichiers supprimés lors de cette synchronisation miroir en spécifiant un dossier où ils seront copiés avant suppression grâce à l’option --backup-dir (sans cette option, ils seront stockés dans le répertoire courant) et à l’option --backup activant le mode backup.

Rmq :

  • La barre de progression ne s’affiche pas par défaut, voir l’option --info=progress1 pour une progression fichier par fichier ou --info=progress2 pour une progression globale.
  • Le slash final des noms de dossiers est important. En effet rsync dir1/ dir2/ n’a pas le même effet que rsync dir1 dir2/ :
    • La première commande copiera le contenu de dir1/ dans dans2/ : dir2/files
    • La deuxième commande copiera le dossier dir1/ dans dir2/ : dir2/dir1/files

ex :

# rsync -Hav --delete source/ destination/
rsync3

 

Synchronisation unidirectionnelle de A vers B (mode update)

rsync -Hauv /pathtoA/ /pathtoB/

Proche de :
cp -au /pathtoA/* /pathtoB/
Au final, B est la fusion des fichiers les plus récents de A et des fichiers les plus récents ou exclusifs de B :

  • Les fichiers propres à A seront copiés sur B
  • Les fichiers propres à B seront conservés
  • Les fichiers de même nom sur B, s’ils sont plus anciens, seront écrasés
  • Les fichiers de même nom sur B, s’ils sont plus récents, seront conservés
rsync_syncatob2

Rmq :

  • La barre de progression ne s’affiche pas par défaut, voir l’option --info=progress1 pour une progression fichier par fichier ou --info=progress2 pour une progression globale.
  • Le slash final des noms de dossiers est important. En effet rsync dir1/ dir2/ n’a pas le même effet que rsync dir1 dir2/ :
    • La première commande copiera le contenu de dir1/ dans dans2/ : dir2/files
    • La deuxième commande copiera le dossier dir1/ dans dir2/ : dir2/dir1/files

ex :

# rsync -Hauv source/ destination/
rsync4

 

Synchronisation bidirectionnelle entre A et B

rsync -Hauv /pathtoA/ /pathtoB/ ; rsync -Hauv /pathtoB/ /pathtoA/

Elle consiste en une synchronisation unidirectionnelle de A vers B suivie d’une synchronisation unidirectionnelle de B vers A.
Au final, A et B sont la fusion des fichiers les plus récents ou exclusifs de A comme de B :

  • Tout ce qui est modifié sur A est copié sur B
  • Tout ce qui est modifié sur B est copié sur A
  • Que ce soit sur A ou B, seuls les fichiers plus récents sont maintenus
  • Les fichiers créés sur A sont copiés sur B
  • Les fichiers créés sur B sont copiés sur A
rsync_syncatobtoa2

Rmq :

  • La barre de progression ne s’affiche pas par défaut, voir l’option --info=progress1 pour une progression fichier par fichier ou --info=progress2 pour une progression globale.
  • Le slash final des noms de dossiers est important. En effet rsync dir1/ dir2/ n’a pas le même effet que rsync dir1 dir2/ :
    • La première commande copiera le contenu de dir1/ dans dans2/ : dir2/files
    • La deuxième commande copiera le dossier dir1/ dans dir2/ : dir2/dir1/files

ex :

# rsync -Hauv source/ destination/ ; rsync -Hauv destination/ source/
rsync5

 

Copier seulement les fichiers qui n’existent pas sur la destination

rsync -Hav --ignore-existing /pathtoA/ /pathtoB/

Si le dossier source contient des fichiers de même nom que sur destination (quel que soit l’horodatage), ces derniers ne seront pas copiés.
Seuls les fichiers inexistants dans la destination seront copiés depuis la source.
Proche de :
cp -an /pathtoA/* /pathtoB/

 

Copier seulement les fichiers qui existent sur la destination

Mode update
rsync -Hauv --existing /pathtoA/ /pathtoB/

Seuls les fichiers plus récents sur A seront copiés sur B.

Mode écrasement
rsync -Hav --existing /pathtoA/ /pathtoB/

Les fichiers de A existant sur B seront copiés, quel que soit leur horodatage.

 

Synchronisation depuis un client vers un serveur SSH distant

rsync -Hauv /pathtoA/ userdst@srvdst:/pathtoB/

Nécessite, au préalable, l’échange de la clef publique du client vers le serveur distant; cf ssh-keygen.
Rsync doit être installé sur la source et la destination.
Openssh-client doit être installé sur la source.
Openssh-server doit être installé sur la destination.

 

Synchronisation depuis un serveur SSH distant vers un client

rsync -Hauv userdst@srvdst:/pathtoA/ /pathtoB/

Nécessite, au préalable, l’échange de la clef publique du client vers le serveur distant; cf ssh-keygen.
Rsync doit être installé sur la source et la destination.
Openssh-client doit être installé sur la source.
Openssh-server doit être installé sur la destination.

 

Afficher une barre de progression

Progression globale
rsync -Hauv /pathtoA/ /pathtoB/ --info=progress2
rsync6


Progression fichier par fichier
rsync -Hauv /pathtoA/ /pathtoB/ --info=progress1

ou

rsync -Hauv /pathtoA/ /pathtoB/ --progress
rsync7


 

Compresser les données durant le transfert afin de préserver le réseau

rsync -Hauzv /pathtoA/ /pathtoB/

 

Mode simulation (dry-run)

rsync -Haunv /pathtoA/ /pathtoB/

 

Afficher des tailles de fichiers human-readables

rsync -Hauhv /pathtoA/ /pathtoB/

 

Afficher le détail des données synchronisées

rsync -Hauv /pathtoA/ /pathtoB/ --stats

ex :

# rsync -Hauhv source/ destination/ --stats
[...]
Number of files: 1,861 (reg: 1,429, dir: 432)
Number of created files: 1,853 (reg: 1,423, dir: 430)
Number of deleted files: 0
Number of regular files transferred: 1,423
Total file size: 329.87M bytes
Total transferred file size: 329.87M bytes
Literal data: 329.87M bytes
Matched data: 0 bytes
File list size: 131.02K
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 330.07M
Total bytes received: 30.19K

sent 330.07M bytes  received 30.19K bytes  15.35M bytes/sec
total size is 329.87M  speedup is 1.00

 

Synchroniser un dossier vers un Windows utilisant Cygwin (avec barre de progression)

rsync -rtxv --size-only --chmod=ugo=rwX /pathtoA/ userdst@hostdst:/pathtoB/ --progress
  • --size-only : la date de modification des fichiers sous Windows n’est pas toujours fiable, il vaut donc mieux se baser sur la taille des fichiers comme référence pour la synchronisation
  • --chmod=ugo=rwX : important sinon on ne pourra pas relire les fichiers dans la destination (droits NTFS verrouillés sans cette option)

ex :

# rsync -rtxv --size-only --chmod=ugo=rwX /home/adminsys/source/ Administrateur@clientxp.opensharing.priv:/cygdrive/c/Local/ --progress

 

Synchroniser un fichier vers un Windows utilisant Cygwin (avec barre de progression)

Avec conservation du nom original du fichier :

rsync -rtxv --size-only --chmod=ugo=rwX filename userdst@hostdst:/pathtoB/ --progress

ou, avec renommage du fichier à la volée :

rsync -rtxv --size-only --chmod=ugo=rwX filename userdst@hostdst:/pathtoB/newfilename --progress

 

Exclure ou inclure certains fichiers de la synchronisation

rsync -Hauv --include=pattern --exclude=pattern /pathtoA/ /pathtoB/

ex :

# rsync -a --exclude=*.txt dir1/ dir2/
# rsync -a --include=*.tar.* --exclude=*.gz dir1/ dir2/
Fermer le menu
%d blogueurs aiment cette page :