Utilisation de la commande rsync pour synchroniser des fichiers et des répertoires [11 Examples]



Découverte de rsync : Synchronisation de Fichiers Simplifiée

Rsync se présente comme un outil en ligne de commande gratuit, conçu pour la synchronisation de fichiers tant au niveau local qu’à distance. Il excelle dans le transfert de fichiers et de répertoires, ce qui en fait un allié précieux pour la migration de données, les sauvegardes et la mise en miroir. Les webmasters et administrateurs y trouveront un outil de choix pour leurs opérations régulières de transfert de données.

Dans cet article, nous allons explorer le fonctionnement de Rsync et illustrer son utilisation à travers quelques exemples concrets.

Fonctionnement de rsync

Rsync est un utilitaire de synchronisation à distance, spécialement conçu pour les systèmes de type Unix. Il offre aux utilisateurs la possibilité de transférer et de synchroniser des fichiers entre différentes machines ou hôtes, de manière transparente.

Au cœur de son fonctionnement, rsync utilise un algorithme de transfert delta. Cet algorithme compare les fichiers présents sur deux hôtes (la source et la destination) et ne copie que les différences entre eux. Cette méthode s’applique aussi bien aux transferts locaux que distants. La commande rsync offre deux modes de fonctionnement pour la copie et la synchronisation des données:

  • Via SSH ou RSH pour synchroniser entre deux hôtes.
  • Via le démon TCP rsync pour les copies ou synchronisations.

Conçu initialement pour les systèmes de type Unix, il est parfaitement fonctionnel sous Linux.

Le processus que rsync met en œuvre se déroule comme suit :

  • Rsync établit une connexion SSH avec l’hôte distant, nécessitant un mot de passe.
  • Une fois la connexion établie, le rsync de l’hôte distant communique avec la source.
  • Ces programmes déterminent ensuite les fichiers et répertoires à synchroniser, en utilisant un algorithme de transfert delta pour identifier les modifications.

Si rsync détecte un fichier inexistant sur l’hôte distant, il le copie. Pour les fichiers déjà présents sur les deux systèmes, rsync ne copie que les parties modifiées. Les fichiers identiques sur les deux systèmes sont ignorés.

Rsync effectue des mises à jour incrémentales en stockant les différences dans un fichier temporaire avant de les appliquer à la destination.

Avant de commencer, assurez-vous que :

  • Vous disposez des privilèges root ou sudo.
  • Vous avez accès au terminal/ligne de commande.
  • Vous avez un accès SSH pour exécuter les commandes rsync en toute sécurité.
  • Vous avez deux machines disponibles pour réaliser des opérations rsync.

Pour ce tutoriel, nous utiliserons Linux Mint 21.1 Vera, mais les instructions peuvent être suivies sur n’importe quelle distribution Linux.

Rsync vs. Scp: Lequel Choisir?

Scp (Secure Copy) est un protocole couramment utilisé pour la copie de fichiers en ligne de commande. Il fonctionne de manière linéaire, copiant simplement les fichiers de la source vers la destination via une connexion SSH sécurisée.

La syntaxe de la commande scp est la suivante :

scp option SOURCE DESTINATION

Alors, pourquoi préférer rsync à scp?

Rsync présente plusieurs avantages significatifs par rapport à scp :

  • Rapidité d’exécution : Rsync est plus rapide que scp car il utilise un protocole de mise à jour à distance, transférant uniquement les différences plutôt que la totalité du fichier. Cela est particulièrement avantageux lors de synchronisations régulières, où seule la copie initiale est complète.
  • Moins de consommation de bande passante : Rsync réduit la consommation de bande passante en ne recopiant pas l’intégralité des fichiers. De plus, il utilise des algorithmes de compression et décompression pour minimiser la taille des fichiers lors des transferts.
  • Plus d’options de ligne de commande : Rsync surpasse scp en termes de nombre d’options disponibles, offrant ainsi un contrôle plus précis sur le processus de synchronisation.

En résumé, rsync est un outil de synchronisation incrémentale puissant, tandis que scp est parfait pour des transferts simples. Dans la pratique, scp convient aux tâches quotidiennes si la simplicité est privilégiée, mais rsync est la solution pour les tâches récurrentes.

Syntaxe de la Commande rsync

La syntaxe de base de la commande rsync est :

rsync [OPTION] SOURCE DESTINATION

Où:

  • OPTION : Ce sont les options spécifiques de rsync.
  • SOURCE : Le répertoire source des fichiers.
  • DEST : Le répertoire de destination.
  • USER: Le nom d’utilisateur distant.
  • HOST : Nom d’hôte ou adresse IP distante.

Les options sont des paramètres qui étendent les fonctionnalités de la commande. Par exemple, l’option -r permet de synchroniser les données de manière récursive. Cependant, cette option ne conserve pas la propriété des groupes et des utilisateurs, les horodatages, les autorisations ou les liens symboliques. Pour ce faire, l’option -a (mode archive) est préférable, car elle garantit la conservation de toutes les informations lors de la copie.

Parmi les autres options courantes de rsync, on trouve:

  • -z: compresser les données pour économiser de l’espace.
  • -h: afficher les données dans un format lisible par l’humain.
  • -b: créer une sauvegarde pendant le processus de synchronisation.
  • -e: utiliser le protocole SSH pour les transferts de données distants.
  • --progress: afficher la progression de la synchronisation.
  • -v: demander à rsync d’afficher une sortie détaillée.
  • --n: effectuer un test pour valider les paramètres avant de lancer la synchronisation réelle.
  • -q: supprimer la sortie et les options de la commande.

Installation de rsync

La plupart des systèmes Unix et Linux incluent rsync par défaut. Si votre système ne le possède pas, vous pouvez l’installer à l’aide des commandes suivantes.

Pour Debian/Ubuntu et Mint:

sudo apt-get install rsync

Pour Arch Linux:

pacman -S rsync

Pour Gentoo:

emerge sys-apps/rsync

Pour CentOS/Fedora/REHL:

sudo yum install rsync

Pour openSUSE:

sudo zypper install rsync

Étant donné que nous utilisons Linux Mint, rsync est préinstallé. Vous pouvez vérifier cela en exécutant simplement la commande rsync dans le terminal, qui vous donnera des informations sur ses capacités et options.


    nitt ~
    $ rsync
    rsync  version 3.2.3  protocol version 31
    Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
    Web site: https://rsync.samba.org/
    Capabilities:
        64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
        socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
        batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
        symtimes, prealloc, stop-at, no crtimes
    Optimizations:
        SIMD, no asm, openssl-crypto
    Checksum list:
        xxh128 xxh3 xxh64 (xxhash) md5 md4 none
    Compress list:
        zstd lz4 zlibx zlib none

    rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
    are welcome to redistribute it under certain conditions.  See the GNU
    General Public Licence for details.

    rsync is a file transfer program capable of efficient remote update
    via a fast differencing algorithm.
  

Maintenant, passons à des exemples d’utilisation.

Pour ce tutoriel, créons deux répertoires :

  • répertoire-source
  • dest-répertoire

Vous pouvez les créer avec les commandes suivantes :

mkdir source-directory
mkdir dest-directory

Nous allons également créer des fichiers de test :

touch source-directory/file{1..100}

Cela créera 100 fichiers vides dans le répertoire source. Vous pouvez confirmer leur création avec la commande suivante.


    ls source-directory
    Output:
    nitt rsync-tutorial
    $ ls
    dest-directory  source-directory
    nitt rsync-tutorial
    $ touch source-directory/file{1..100}
    nitt rsync-tutorial
    $ ls source-directory
    file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
    file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
    file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
    file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
    file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
    file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
    file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
    file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
    file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
    file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Notez que le répertoire dest est vide.

Copie Récursive Locale de Répertoires

Bien que rsync soit principalement conçu pour les transferts entre serveurs locaux et distants, il est aussi très pratique pour la copie locale de fichiers.

Dans ce cas, nous allons utiliser la syntaxe suivante :

rsync option SOURCE DESTINATION

Copiez les fichiers de notre répertoire source dans le répertoire dest en exécutant la commande suivante :

rsync -r source-directory/ dest-directory

Cette commande copie récursivement les fichiers du répertoire source vers le répertoire dest.


    nitt rsync-tutorial
    $ ls
    dest-directory  source-directory
    nitt rsync-tutorial
    $ ls dest-directory
    nitt rsync-tutorial
    $ ls source-directory
    file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
    file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
    file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
    file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
    file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
    file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
    file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
    file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
    file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
    file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
    nitt rsync-tutorial
    $ rsync -r source-directory/ dest-directory
    nitt rsync-tutorial
    $ ls dest-directory
    file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
    file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
    file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
    file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
    file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
    file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
    file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
    file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
    file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
    file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Cela copie tous les fichiers du répertoire source vers le répertoire dest.

Copie Locale d’un Seul Fichier

Nous allons maintenant apprendre à copier un seul fichier.

Pour cela, nous allons modifier le fichier vide file1 dans le répertoire source et le synchroniser avec le même fichier présent dans le répertoire dest.

Pour modifier un fichier, utilisez la commande suivante :

nano source-directory/file1

Copiez-collez le texte suivant dans l’éditeur nano :


We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.

Ajouter du contenu à un fichier

Fermez et enregistrez le fichier.

Copions maintenant le fichier en utilisant rsync :

sudo rsync -v --existing source-directory/file1 dest-directory

    #Output
    nitt rsync-tutorial
    $ sudo rsync -v --existing source-directory/file1 dest-directory
    file1

    sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
    total size is 474  speedup is 0.80

    nitt rsync-tutorial
    $

L’option --existing assure la mise à jour des fichiers existants. Sans cette option, le fichier ne serait pas mis à jour, même si la commande s’exécutait correctement.

Si le fichier que vous copiez n’existe pas dans le dossier de destination, utilisez la commande suivante :

rsync -v source-directory/newfile dest-directory

    #Output
    nitt rsync-tutorial
    $ rsync -v source-directory/newfile dest-directory
    newfile

    sent 82 bytes  received 35 bytes  234.00 bytes/sec
    total size is 0  speedup is 0.00

Copie de Plusieurs Fichiers

Pour copier plusieurs fichiers, spécifiez leurs chemins sources, suivis du répertoire cible.

Pour ce faire, créons deux nouveaux fichiers, newfile2 et newfile3, dans le répertoire source :

touch source-directory/newfile{2..3}

Puis, synchronisez-les avec la commande suivante :

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory

    #Output
    nitt rsync-tutorial
    $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
    newfile2
    newfile3

    sent 135 bytes  received 54 bytes  378.00 bytes/sec
    total size is 0  speedup is 0.00
    nitt rsync-tutorial
    $

Copie de Fichiers ou Répertoires de Local à Distance

La syntaxe rsync pour un transfert local vers distant est :

rsync option SOURCE [email protected]:DEST

Vous devez connaître l’adresse IP de la machine distante. L’adresse IP est à spécifier après le fichier source.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Le système vous demandera un mot de passe. Si l’utilisateur est différent sur la machine distante, mentionnez-le avant l’adresse IP, suivi de @ :

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Pour copier plusieurs fichiers ou répertoires, listez les fichiers ou chemins de répertoires. La syntaxe est :

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Spécification de Protocoles pour le Transfert Distant

Rsync permet de spécifier des protocoles de transfert spécifiques grâce à l’option -e, suivie du protocole :

Par exemple, pour utiliser le protocole ssh :

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Copie de Fichiers ou Répertoires de Distant à Local

La syntaxe rsync pour un transfert distant vers local est :

sync option [email protected]:SRC DEST

Pour récupérer les fichiers ou répertoires d’un serveur distant vers votre ordinateur local, utilisez :

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Cette commande extrait les fichiers du répertoire dest de la machine distante vers le répertoire source de la machine locale.

Pour extraire un fichier spécifique, indiquez son chemin complet :

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Pour copier plusieurs fichiers ou répertoires, spécifiez les chemins entre accolades (séparés par des virgules) après l’adresse IP du serveur:

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

De la même manière, vous pouvez indiquer des fichiers.

Affichage de la Progression en Direct

Pour les sauvegardes de données volumineuses, il est utile de visualiser la progression en direct. Utilisez l’indicateur --progress pour afficher la vitesse de transfert, le temps restant et la quantité de données transférées :

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Suppression des Fichiers Source Après le Transfert

L’option --remove-source-files permet de supprimer les fichiers source après le transfert, ce qui peut être utile pour sécuriser vos fichiers ou libérer de l’espace.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Test d’Exécution avec rsync

Rsync permet d’effectuer des tests d’exécution pour éviter des erreurs. Utilisez l’option --dry-run pour simuler la synchronisation :

sudo rsync -v --dry-run source-directory/file1 dest-directory

    nitt rsync-tutorial
    $ sudo rsync -v --dry-run source-directory/file1 dest-directory
    file1

    sent 43 bytes  received 19 bytes  124.00 bytes/sec
    total size is 474  speedup is 7.65 (DRY RUN)
    nitt rsync-tutorial

La sortie est identique à une exécution normale, mais elle contient l’indication (DRY RUN).

Définition de la Taille Minimale et Maximale des Fichiers

Rsync permet de définir une taille minimale ou maximale pour le transfert. Pour une taille minimale de 15 Ko, utilisez l’option --min-size=15k:

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Cette commande copiera seulement les fichiers dont la taille est d’au moins 15 Ko. De même, utilisez --max-size pour définir une taille maximale :

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ici, rsync ignorera les fichiers de plus de 450 Ko.

Définition de la Limite de Bande Passante

Pour limiter la bande passante lors du transfert, utilisez le paramètre --bwlimit=KB/s :

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Dans cet exemple, nous limitons la bande passante à 100 Ko/s.

Conclusion

Ce guide vous a permis de découvrir l’utilisation de la commande rsync. Nous avons abordé de nombreux cas d’utilisation. Cependant, rsync offre encore plus de fonctionnalités. Pour approfondir le sujet, consultez la page de manuel de rsync.

N’hésitez pas à explorer également les feuilles de triche pour la ligne de commande pour Windows, Linux et macOS.