Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Rclone : synchroniser et sauvegarder vos données cloud (S3, Drive, Dropbox)

21 min de lecture
Améliorer cette page

Logo Rclone

Rclone copie, synchronise et sauvegarde vos fichiers entre votre machine et plus de 70 services cloud (Google Drive, Dropbox, Amazon S3, MinIO...) ou entre deux clouds directement. C'est l'équivalent de rsync pour le cloud, en ligne de commande.

Avec rclone, vous pouvez :

  • Synchroniser un dossier local vers un bucket S3 ou Google Drive
  • Sauvegarder vos données, y compris chiffrées via le remote crypt de rclone (voir la documentation officielle)
  • Migrer des fichiers entre deux providers cloud sans téléchargement local
  • Monter un stockage cloud comme un disque local
  • Installer rclone en vérifiant l'empreinte de l'archive avant de s'en servir.
  • Déclarer un remote et le manipuler avec les commandes de base.
  • Copier, synchroniser et migrer des fichiers, y compris de cloud à cloud sans passer par votre disque.
  • Synchroniser dans les deux sens avec bisync, et régler les conflits avec les trois drapeaux qui s'en occupent.
  • Filtrer ce qui est transféré et vérifier qu'une copie correspond bien à sa source.

Pour suivre les exemples, il vous faut un terminal Linux ou macOS avec les commandes curl et sha256sum (ou shasum), et Docker installé : il sert uniquement à lancer le banc de test S3 local de la section « Environnement de test avec RustFS ». Sans Docker, vous pouvez utiliser le compte S3 d'un provider à la place, en adaptant l'endpoint et les clés. Aucune connaissance préalable de rclone n'est nécessaire.

Rclone est distribué sous forme d'un binaire unique, sans dépendance à installer. Sur Linux, la méthode ci-dessous télécharge l'archive officielle, vérifie son empreinte avec le fichier de sommes publié par le projet, puis copie le binaire dans /usr/local/bin. Cette vérification est ce qui garantit que l'archive n'a pas été altérée entre le serveur de téléchargement et votre machine.

Téléchargez l'archive et le fichier SHA256SUMS de la version voulue, puis contrôlez l'empreinte avant d'extraire quoi que ce soit :

Fenêtre de terminal
RCLONE_VERSION=v1.75.2
curl -fsSLO "https://downloads.rclone.org/${RCLONE_VERSION}/rclone-${RCLONE_VERSION}-linux-amd64.zip"
curl -fsSLO "https://downloads.rclone.org/${RCLONE_VERSION}/SHA256SUMS"
# Doit afficher : rclone-v1.75.2-linux-amd64.zip: OK
grep "rclone-${RCLONE_VERSION}-linux-amd64.zip" SHA256SUMS | sha256sum --check

Si la vérification échoue, arrêtez-vous : ne décompressez pas l'archive. Sinon, installez le binaire :

Fenêtre de terminal
unzip -q "rclone-${RCLONE_VERSION}-linux-amd64.zip"
sudo install -m 0755 "rclone-${RCLONE_VERSION}-linux-amd64/rclone" /usr/local/bin/rclone

Ou via le gestionnaire de paquets (version potentiellement plus ancienne) :

Fenêtre de terminal
# Debian/Ubuntu
sudo apt install rclone
# Fedora
sudo dnf install rclone
# Arch Linux
sudo pacman -S rclone

Vérifiez l'installation :

Fenêtre de terminal
rclone version
Sortie attendue
rclone v1.75.2
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.8.0-90-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.25.5
- go/linking: static
- go/tags: none

Pour tester les commandes de ce guide, déployons rapidement un stockage compatible S3 en local, avec Docker. MinIO ne publie plus d'image communautaire récupérable : au 9 octobre 2026, minio/minio sur Docker Hub et quay.io/minio/minio ne se téléchargent plus. Ce guide utilise donc RustFS, un autre stockage compatible S3. RustFS est publié en version stable (1.0.1) ; ici, il ne sert que de banc d'essai local. Vous pourrez ensuite remplacer l'endpoint par celui de votre provider (AWS S3, Outscale, Scaleway...).

  1. Lancez RustFS sur le port 9000, limité à 127.0.0.1 :

    Fenêtre de terminal
    export AWS_ACCESS_KEY_ID=demo-local-access
    export AWS_SECRET_ACCESS_KEY=demo-local-secret-key
    docker run -d --name rustfs -p 127.0.0.1:9000:9000 \
    -e RUSTFS_ACCESS_KEY="$AWS_ACCESS_KEY_ID" \
    -e RUSTFS_SECRET_KEY="$AWS_SECRET_ACCESS_KEY" \
    -e RUSTFS_VOLUMES=/data \
    -v rustfs-data:/data \
    rustfs/rustfs:1.0.1@sha256:1803faef57627e2d9c2e7d89d655d712ddded5389040054987163043fecb6a3c

    Les deux valeurs demo-local-* sont des valeurs de démonstration, valables uniquement pour ce conteneur local lié à 127.0.0.1. Ne les réutilisez jamais sur un vrai stockage.

  2. Déclarez le remote rclone rustfs. Avec env_auth = true, rclone lit les clés dans les variables AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY exportées à l'étape 1, donc aucune clé n'est écrite dans le fichier :

    Fenêtre de terminal
    mkdir -p ~/.config/rclone
    cat >> ~/.config/rclone/rclone.conf << 'EOF'
    [rustfs]
    type = s3
    provider = Other
    env_auth = true
    endpoint = http://127.0.0.1:9000
    EOF
  3. Testez la connexion (la liste est vide tant qu'aucun bucket n'existe, et la commande rend le code 0) :

    Fenêtre de terminal
    rclone lsd rustfs:
    rclone mkdir rustfs:mon-bucket
    rclone lsd rustfs:

    Pour tout supprimer en fin de test : docker rm -fv rustfs && docker volume rm rustfs-data.

Avant de configurer rclone, comprenez ces deux concepts essentiels.

Un remote est un emplacement de stockage configuré dans rclone. Il peut être :

  • Un service cloud (Google Drive, Dropbox, Amazon S3, MinIO...)
  • Un serveur distant (SFTP, FTP, WebDAV)
  • Un stockage local (pour les tests ou le chiffrement)

Chaque remote a un nom que vous utilisez dans les commandes, suivi de : :

Fenêtre de terminal
rclone ls mondrive: # Liste le contenu du remote "mondrive"
rclone ls rustfs:mon-bucket # Liste le bucket "mon-bucket" sur le remote "rustfs"

Toutes les commandes rclone suivent le pattern source → destination :

Fenêtre de terminal
rclone copy /local/dossier remote:bucket/chemin
# ↑ source ↑ destination

Le schéma ci-dessous oppose sync (un seul sens) à bisync (deux sens), détaillés plus bas.

rclone sync copie dans un seul sens, de la source locale vers la destination cloud ; rclone bisync synchronise dans les deux sens entre local et cloud.rclone sync : unidirectionnelLocalsourceClouddestinationrclone bisync : bidirectionnelLocalCloud
Source · SVG
Échap pour fermer, + et − pour zoomer, défilement pour se déplacer. 100 %

La configuration se fait via rclone config qui lance un assistant interactif.

  1. Lancez l'assistant :

    Fenêtre de terminal
    rclone config
  2. Créez un nouveau remote en tapant n (new remote)

  3. Donnez-lui un nom (ex: rustfs, gdrive, dropbox)

  4. Choisissez le type de stockage parmi la liste (ex: s3 pour S3 et ses variantes compatibles, drive pour Google Drive)

  5. Répondez aux questions spécifiques au provider (credentials, région, endpoint...)

  6. Testez la connexion :

    Fenêtre de terminal
    rclone lsd monremote:

Pour un stockage S3-compatible comme RustFS ou Outscale OOS :

Fenêtre de terminal
rclone config
n) New remote
name> rustfs
Storage> s3
provider> Other
env_auth> false
access_key_id> VOTRE_ACCESS_KEY
secret_access_key> VOTRE_SECRET_KEY
endpoint> http://rustfs.example.com:9000

Ou ajoutez directement dans ~/.config/rclone/rclone.conf :

~/.config/rclone/rclone.conf
[rustfs]
type = s3
provider = Other
access_key_id = VOTRE_ACCESS_KEY
secret_access_key = VOTRE_SECRET_KEY
endpoint = http://rustfs.example.com:9000

Pour éviter de stocker les mots de passe en clair, utilisez rclone obscure :

Fenêtre de terminal
rclone obscure "mon-mot-de-passe-secret"
Sortie (exemple, rclone 1.72.1)
nBBFHEkdMKWHM0ouql0QeinwJgAmJO_EFrcM42l7iSgye9AlgCka

La sortie change à chaque appel : rclone chiffre la valeur avec une clé fixe et un vecteur aléatoire, ce n'est pas un simple encodage base64. C'est un obscurcissement, pas un chiffrement : n'importe qui disposant de rclone peut retrouver la valeur avec rclone reveal.

rclone obscure ne vaut que pour les champs que rclone stocke obscurcis, comme le mot de passe d'un remote SFTP ou WebDAV. Le champ secret_access_key d'un remote S3 est écrit en clair dans rclone.conf : pour le protéger, passez par env_auth = true ou chiffrez le fichier de configuration (voir ci-dessous).

Ces commandes permettent d'explorer et organiser vos fichiers.

Ces quatre commandes ne renvoient pas la même chose : lsd ne montre que les répertoires (les buckets à la racine d'un remote S3), ls parcourt récursivement les fichiers, lsl ajoute la date de modification, et lsjson produit une sortie exploitable par un script.

Fenêtre de terminal
# Lister les buckets/dossiers racine
rclone lsd rustfs:
# Lister tous les fichiers (récursif)
rclone ls rustfs:mon-bucket/
# Lister avec détails (taille, date)
rclone lsl rustfs:mon-bucket/
# Format JSON pour scripts
rclone lsjson rustfs:mon-bucket/
Exemple de sortie lsd
-1 2026-01-23 14:39:22 -1 mon-bucket
-1 2026-01-23 15:00:00 -1 backups

Sur un remote S3, rclone mkdir à la racine crée un bucket ; le nom doit donc respecter les règles de nommage du fournisseur. rclone touch crée un objet vide ou met à jour sa date s'il existe déjà.

Fenêtre de terminal
# Créer un bucket/dossier
rclone mkdir rustfs:nouveau-bucket
# Créer un fichier vide (ou mettre à jour sa date)
rclone touch rustfs:mon-bucket/nouveau-fichier.txt

rclone size est récursif par défaut : il énumère tous les objets sous le chemin indiqué, ce qui peut prendre plusieurs minutes sur un gros bucket. L'option --max-depth 1 limite le parcours au premier niveau.

Fenêtre de terminal
rclone size rustfs:mon-bucket/
Sortie
Total objects: 42
Total size: 1.234 GiB (1325432678 Byte)

Ces commandes copient, déplacent ou synchronisent vos fichiers.

rclone copy copie les fichiers sans supprimer ceux qui n'existent plus dans la source.

Fenêtre de terminal
# Copier un dossier local vers le cloud
rclone copy /home/user/documents/ rustfs:backups/documents/
# Copier entre deux clouds
rclone copy gdrive:photos/ dropbox:photos-backup/
# Copier un fichier avec un nouveau nom
rclone copyto /local/rapport.pdf rustfs:backups/rapport-2026.pdf

rclone move copie puis supprime les fichiers source après transfert réussi.

Fenêtre de terminal
# Archiver des logs vers S3 (supprime les locaux)
rclone move /var/log/archive/ rustfs:logs-archive/
# Déplacer entre clouds
rclone move dropbox:old-project/ gdrive:archives/old-project/

rclone sync rend la destination identique à la source. Les fichiers absents de la source sont supprimés de la destination.

Fenêtre de terminal
# Synchroniser local → cloud
rclone sync /home/user/projets/ rustfs:projets-backup/

Pour conserver les fichiers supprimés dans un dossier de sauvegarde :

Fenêtre de terminal
rclone sync /source/ rustfs:dest/ --backup-dir rustfs:dest-deleted/

sync impose la source à la destination ; bisync reporte les modifications dans les deux sens en s'appuyant sur un état de référence conservé localement entre deux exécutions. C'est ce qui lui permet de distinguer un fichier ajouté d'un fichier supprimé, et c'est aussi pourquoi la toute première exécution exige une initialisation explicite.

Contrairement à sync (unidirectionnel), bisync propage les modifications des deux côtés :

Fenêtre de terminal
# Première exécution : initialisation obligatoire
rclone bisync /local/dossier/ rustfs:bucket/ --resync
# Exécutions suivantes : sync bidirectionnel
rclone bisync /local/dossier/ rustfs:bucket/

Cas d'usage : synchroniser un dossier de travail entre votre laptop et le cloud, pour y accéder depuis plusieurs machines.

Si le même fichier est modifié des deux côtés entre deux bisync :

Fenêtre de terminal
# Résolution automatique : garder le plus récent
rclone bisync /local/ remote:/ --conflict-resolve newer
# Garder le plus récent ET conserver le perdant sous un nom suffixé
rclone bisync /local/ remote:/ \
--conflict-resolve newer --conflict-loser num --conflict-suffix conflit

Trois drapeaux se partagent le travail, et confondre les deux premiers est l'erreur classique. --conflict-resolve décide qui gagne, et n'accepte que none (le défaut), newer, older, larger, smaller, path1 ou path2. --conflict-loser décide du sort du perdant : num le renomme avec un numéro, pathname le renomme d'après son côté, delete le supprime. --conflict-suffix choisit le suffixe, conflict par défaut.

Avec le défaut none, rclone ne tranche pas : il conserve les deux versions sous les noms fichier.conflict1 et fichier.conflict2, et vous laissez le choix à l'humain. C'est souvent le réglage le plus sage sur des documents.

Une sauvegarde n'a de valeur que si elle est vérifiée, et un stockage objet ne se vide pas tout seul. Ces commandes couvrent les deux besoins : contrôler que la copie correspond bien à la source, et supprimer ce qui n'a plus lieu d'être. Les suppressions sont définitives sur la plupart des remotes.

rclone check compare les fichiers entre deux emplacements (taille et hash) :

Fenêtre de terminal
rclone check /local/dossier/ rustfs:bucket/
Sortie
2026/01/23 14:41:02 NOTICE: S3 bucket mon-bucket: 0 differences found
2026/01/23 14:41:02 NOTICE: S3 bucket mon-bucket: 42 matching files

Les trois commandes ne portent pas sur le même périmètre : delete retire les fichiers mais laisse l'arborescence en place et respecte les filtres, purge efface le répertoire et tout son contenu sans tenir compte des filtres, et rmdirs ne s'occupe que des répertoires vides.

Fenêtre de terminal
# Supprimer les fichiers (garde les dossiers vides)
rclone delete rustfs:bucket/old-data/
# Supprimer un dossier et tout son contenu
rclone purge rustfs:bucket/old-data/
# Supprimer uniquement les dossiers vides
rclone rmdirs rustfs:bucket/

Contrôlez précisément quels fichiers sont traités avec les filtres.

Point à connaître avant d'écrire votre première règle : dès qu'un --include est présent, rclone ajoute implicitement une exclusion de tout le reste. Un --include "*.jpg" seul ne copie donc que les fichiers .jpg, même sans --exclude.

Fenêtre de terminal
# Copier uniquement les images
rclone copy /photos/ rustfs:photos/ --include "*.jpg" --include "*.png"
# Exclure les fichiers temporaires
rclone sync /projet/ rustfs:projet/ --exclude "*.tmp" --exclude ".git/**"
# Combiner inclusion et exclusion
rclone copy /data/ rustfs:data/ --include "*.log" --exclude "*"

Pour des règles complexes, utilisez un fichier :

filters.txt
# Inclure les documents
+ *.pdf
+ *.docx
+ /important/**
# Exclure le reste
- *.tmp
- .git/**
- node_modules/**
- *
Fenêtre de terminal
rclone sync /projet/ rustfs:backup/ --filter-from filters.txt

Toujours tester vos filtres avant exécution :

Fenêtre de terminal
rclone sync /source/ remote:dest/ --filter-from filters.txt --dry-run -v

Au-delà du transfert de fichiers, rclone sait exposer un remote comme un système de fichiers local ou comme un serveur. Ces deux modes transforment un stockage objet distant en ressource utilisable par des applications qui ne connaissent rien à S3, au prix d'une latence et de limites qu'il vaut mieux connaître avant de les mettre en production.

Le montage passe par FUSE et reste actif tant que le processus tourne : --daemon le détache du terminal. Sans --vfs-cache-mode, les écritures en accès aléatoire échouent, car un objet distant ne se modifie pas en place.

Fenêtre de terminal
# Monter Google Drive sur /mnt/gdrive
rclone mount gdrive: /mnt/gdrive --daemon
# Avec cache pour de meilleures performances
rclone mount gdrive: /mnt/gdrive --vfs-cache-mode full --daemon

Ces serveurs écoutent par défaut sur 127.0.0.1:8080 et n'exigent aucune authentification. Écrire --addr :8080 comme ci-dessous les rend accessibles depuis tout le réseau : n'ajoutez cette option qu'accompagnée de --user et --pass, ou d'un fichier --htpasswd.

Fenêtre de terminal
# Serveur HTTP simple
rclone serve http rustfs:mon-bucket/ --addr 127.0.0.1:8080
# Serveur WebDAV, ouvert au réseau, donc protégé par un mot de passe
rclone serve webdav rustfs:mon-bucket/ --addr :8080 --user demo --pass "$MOT_DE_PASSE_WEBDAV"

Le premier serveur reste local (127.0.0.1) et n'a donc pas besoin de mot de passe. Le second écoute sur toutes les interfaces : l'authentification --user / --pass est alors indispensable, avec un mot de passe que vous définissez dans la variable MOT_DE_PASSE_WEBDAV avant de lancer la commande.

Les trois pannes les plus fréquentes sur le banc de test ont chacune une cause simple. Lisez le message d'erreur avant de relancer : rclone indique presque toujours le remote et l'opération en cause.

SymptômeCause probableSolution
Une commande reste bloquée de longues secondes puis échoue avec no EC2 IMDS role found (ou InvalidAccessKeyId si un fichier ~/.aws/credentials existe), juste après l'ouverture d'un nouveau terminalAWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY ne sont exportées que dans le terminal de l'étape 1 : env_auth = true ne les trouve plus et rclone va chercher d'autres sources d'identifiants (fichier AWS, puis service de métadonnées EC2)Réexportez les deux variables (mêmes valeurs demo-local-*) dans le nouveau terminal
SignatureDoesNotMatchLa clé secrète transmise ne correspond pas à celle du serveur (valeur différente, ou clé modifiée avant d'être transmise)Vérifiez que la clé est en clair, identique des deux côtés
Une copie ou une synchronisation a supprimé ou écrasé plus que prévuLa commande a été lancée sans prévisualisationRelancez toujours avec --dry-run d'abord, puis sans l'option une fois la liste conforme

Quand le message n'est pas explicite, ajoutez -vv pour voir les requêtes envoyées au serveur.

  • Remote = stockage configuré : un remote est un alias vers un service cloud. Utilisez remote:chemin dans toutes les commandes.
  • sync ≠ copy : copy ajoute des fichiers, sync rend la destination identique (supprime les extras), bisync synchronise dans les deux sens.
  • bisync : synchronisation dans les deux sens, à initialiser avec --resync ; --conflict-resolve décide qui gagne, --conflict-loser du sort du perdant, --conflict-suffix du suffixe.
  • --dry-run toujours : avant tout sync ou delete, prévisualisez avec --dry-run pour éviter les mauvaises surprises.
  • Filtres puissants : utilisez --include, --exclude et --filter-from pour cibler précisément les fichiers.

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn