S3cmd est un outil en ligne de commande pour transférer, synchroniser et gérer vos données sur Amazon S3 et tout stockage compatible (MinIO, Outscale OOS, Scaleway, DigitalOcean Spaces...). Avec une seule commande, vous pouvez uploader des fichiers, synchroniser des dossiers, gérer les ACL et automatiser vos sauvegardes.
Principales fonctionnalités :
put/get: transférer des fichiers vers/depuis S3sync: synchroniser un dossier local avec un bucket (incrémental)mb/rb: créer et supprimer des bucketsls: lister buckets et objetscp/mv/del: copier, déplacer, supprimer des objets
Installation
Section intitulée « Installation »Via pip (recommandé pour avoir la dernière version) :
pip install s3cmd==2.4.0Ou via le gestionnaire de paquets (version potentiellement plus ancienne) :
# Debian/Ubuntusudo apt install s3cmd
# Fedora/RHELsudo dnf install s3cmdAvec Homebrew :
brew install s3cmdAvec Python et pip installés :
pip install s3cmd==2.4.0Vérifiez l'installation :
s3cmd --versions3cmd version 2.4.0Environnement de test avec MinIO
Section intitulée « Environnement de test avec MinIO »Pour tester les commandes de ce guide sans frais, déployons MinIO (stockage S3-compatible) sur minikube. Vous pourrez ensuite adapter la configuration à votre provider (AWS S3, Outscale, Scaleway...).
-
Démarrez minikube (si ce n'est pas déjà fait) :
Fenêtre de terminal minikube start -
Déployez MinIO :
Fenêtre de terminal minikube kubectl -- create namespace miniominikube kubectl -- run minio --image=minio/minio:RELEASE.2025-01-20T14-49-07Z -n minio \--env="MINIO_ROOT_USER=minioadmin" \--env="MINIO_ROOT_PASSWORD=minioadmin" \-- server /data --console-address ":9001" -
Exposez le service :
Fenêtre de terminal minikube kubectl -- expose pod minio -n minio \--port=9000 --target-port=9000 --type=NodePort --name=minio-api -
Récupérez l'URL d'accès :
Fenêtre de terminal echo "http://$(minikube ip):$(minikube kubectl -- get svc minio-api -n minio -o jsonpath='{.spec.ports[0].nodePort}')"Exemple de sortie http://192.168.49.2:31019
Configuration
Section intitulée « Configuration »s3cmd lit ses paramètres dans un unique fichier, ~/.s3cfg. Deux réglages y
décident de tout le reste : host_base, qui désigne le service visé, et
signature_v2, qui doit correspondre à ce que ce service accepte. Une erreur
sur l'un des deux se manifeste par un refus d'authentification, jamais par un
message explicite sur la cause.
Configuration interactive
Section intitulée « Configuration interactive »Lancez l'assistant de configuration :
s3cmd --configureL'assistant vous demande :
- Access Key : votre clé d'accès (ex:
minioadminpour MinIO) - Secret Key : votre clé secrète
- Default Region : région par défaut (ex:
us-east-1) - S3 Endpoint : URL du service S3 (ex:
192.168.49.2:31019pour MinIO)
Configuration manuelle
Section intitulée « Configuration manuelle »Pour MinIO ou un stockage compatible, créez directement le fichier ~/.s3cfg :
[default]access_key = minioadminsecret_key = minioadminhost_base = 192.168.49.2:31019host_bucket = 192.168.49.2:31019use_https = Falsesignature_v2 = TrueConfiguration pour Outscale OOS
Section intitulée « Configuration pour Outscale OOS »Pour Outscale Object Storage :
[default]access_key = VOTRE_ACCESS_KEYsecret_key = VOTRE_SECRET_KEYhost_base = oos.eu-west-2.outscale.comhost_bucket = %(bucket)s.oos.eu-west-2.outscale.comuse_https = Truesignature_v2 = Falsewebsite_endpoint = https://%(bucket)s.oos-website.eu-west-2.outscale.com/Gestion des buckets
Section intitulée « Gestion des buckets »Un bucket est le conteneur de premier niveau du stockage objet. Son nom est unique par service et entre dans l'URL d'accès, ce qui interdit les majuscules et les caractères accentués. Ces quatre commandes couvrent son cycle de vie complet.
Créer un bucket
Section intitulée « Créer un bucket »Le nom est unique sur l'ensemble du service et entre dans l'URL d'accès, ce qui exclut majuscules et accents.
s3cmd mb s3://mon-bucketBucket 's3://mon-bucket/' createdLister les buckets
Section intitulée « Lister les buckets »Sans argument, ls liste les buckets avec leur date de création ; avec un chemin, il liste leur contenu.
s3cmd ls2026-01-23 14:18 s3://mon-bucket2026-01-23 13:39 s3://autre-bucketInformations sur un bucket
Section intitulée « Informations sur un bucket »info révèle les réglages que les autres commandes ne montrent pas : région, versioning, politique et CORS.
s3cmd info s3://mon-buckets3://mon-bucket/ (bucket): Location: us-east-1 Payer: BucketOwner Versioning:none Expiration rule: none Policy: none CORS: none ACL: CanonicalUser: FULL_CONTROLSupprimer un bucket
Section intitulée « Supprimer un bucket »La commande échoue tant que le bucket contient un seul objet ; il faut le vider d'abord.
# Le bucket doit être vides3cmd rb s3://mon-bucketBucket 's3://mon-bucket/' removedTransfert de fichiers
Section intitulée « Transfert de fichiers »put et get transfèrent des objets un par un ou par lots. Le point
d'attention est la barre finale dans la destination : s3://bucket/dossier/
place le fichier dans le dossier, alors que s3://bucket/dossier le renomme.
L'option --recursive est indispensable dès qu'une arborescence est en jeu.
Uploader un fichier
Section intitulée « Uploader un fichier »La progression affichée indique le débit réel : c'est le premier indicateur à regarder quand un transfert paraît lent.
s3cmd put rapport.txt s3://mon-bucket/upload: 'rapport.txt' -> 's3://mon-bucket/rapport.txt' [1 of 1] 29 of 29 100% in 0s 6.47 KB/s doneUploader plusieurs fichiers
Section intitulée « Uploader plusieurs fichiers »Le shell développe le motif avant l'appel : c'est lui qui décide des fichiers envoyés, pas s3cmd.
s3cmd put *.pdf s3://mon-bucket/documents/Uploader un dossier complet
Section intitulée « Uploader un dossier complet »--recursive est obligatoire sur un dossier, sans quoi la commande refuse de traiter le répertoire.
s3cmd put --recursive mon-dossier/ s3://mon-bucket/backup/Télécharger un fichier
Section intitulée « Télécharger un fichier »get refuse d'écraser un fichier local existant, comportement voulu qui évite la perte de données involontaire.
s3cmd get s3://mon-bucket/rapport.txt ./download: 's3://mon-bucket/rapport.txt' -> './rapport.txt' [1 of 1] 29 of 29 100% in 0s 32.93 KB/s doneTélécharger un dossier complet
Section intitulée « Télécharger un dossier complet »La barre finale sur la source détermine si l'arborescence est recréée telle quelle dans la destination.
s3cmd get --recursive s3://mon-bucket/backup/ ./restore/Lister et explorer les objets
Section intitulée « Lister et explorer les objets »Le stockage objet n'a pas de vrais répertoires : la hiérarchie que vous
voyez est une convention de nommage sur les clés. C'est pourquoi ls sans
--recursive n'affiche que le premier niveau, en regroupant le reste sous
des préfixes communs.
Lister le contenu d'un bucket
Section intitulée « Lister le contenu d'un bucket »Sans --recursive, seul le premier niveau apparaît : les clés plus profondes sont regroupées sous leur préfixe commun.
s3cmd ls s3://mon-bucket/2026-01-23 14:19 25 s3://mon-bucket/documents/notes.md2026-01-23 14:19 29 s3://mon-bucket/documents/rapport.txtLister récursivement
Section intitulée « Lister récursivement »Cette forme affiche toutes les clés, à plat. C'est celle à utiliser pour compter des objets ou chercher un chemin précis.
s3cmd ls -r s3://mon-bucket/2026-01-23 14:19 25 s3://mon-bucket/backup/documents/notes.md2026-01-23 14:19 29 s3://mon-bucket/backup/documents/rapport.txt2026-01-23 14:19 15 s3://mon-bucket/backup/photos/vacances.jpgAfficher l'espace utilisé
Section intitulée « Afficher l'espace utilisé »du renvoie la taille cumulée et le nombre d'objets, les deux valeurs qui déterminent la facturation.
s3cmd du s3://mon-bucket/ 98 4 objects s3://mon-bucket/Copier, déplacer et supprimer
Section intitulée « Copier, déplacer et supprimer »Ces opérations s'exécutent côté serveur : les données ne transitent pas par votre machine, ce qui rend la copie d'un gros objet quasi instantanée. La suppression, elle, est définitive et sans confirmation sur un bucket dépourvu de versioning.
Copier un objet
Section intitulée « Copier un objet »La mention remote copy dans la sortie confirme que l'opération s'est faite côté serveur, sans transfert par votre machine.
s3cmd cp s3://mon-bucket/rapport.txt s3://mon-bucket/archives/rapport.txtremote copy: 's3://mon-bucket/rapport.txt' -> 's3://mon-bucket/archives/rapport.txt' [1 of 1]Copier entre buckets
Section intitulée « Copier entre buckets »Les deux buckets doivent appartenir au même service ; entre deux fournisseurs, il faut télécharger puis renvoyer.
s3cmd cp s3://source-bucket/fichier.txt s3://dest-bucket/fichier.txtDéplacer un objet
Section intitulée « Déplacer un objet »mv enchaîne une copie puis une suppression : en cas d'interruption, l'objet peut exister aux deux emplacements.
s3cmd mv s3://mon-bucket/ancien.txt s3://mon-bucket/nouveau.txtSupprimer un objet
Section intitulée « Supprimer un objet »La suppression est immédiate et sans confirmation, et définitive si le versioning n'est pas activé sur le bucket.
s3cmd del s3://mon-bucket/fichier.txtdelete: 's3://mon-bucket/fichier.txt'Vider un bucket
Section intitulée « Vider un bucket »--force supprime tout le contenu sans demander : c'est la commande la plus dangereuse de cette page.
s3cmd del s3://mon-bucket/ --recursive --forcedelete: 's3://mon-bucket/archives/rapport.txt'delete: 's3://mon-bucket/backup/documents/notes.md'delete: 's3://mon-bucket/backup/documents/rapport.txt'Synchronisation
Section intitulée « Synchronisation »La synchronisation est la fonctionnalité la plus puissante de s3cmd. Elle compare les fichiers et ne transfère que les modifications.
Synchroniser local vers S3
Section intitulée « Synchroniser local vers S3 »sync compare taille et date avant d'agir, et ne transfère que les fichiers réellement modifiés.
s3cmd sync mon-dossier/ s3://mon-bucket/backup/upload: 'mon-dossier/documents/notes.md' -> 's3://mon-bucket/backup/documents/notes.md' [1 of 3] 25 of 25 100% in 0s 4.36 KB/s doneupload: 'mon-dossier/documents/rapport.txt' -> 's3://mon-bucket/backup/documents/rapport.txt' [2 of 3] 29 of 29 100% in 0s 9.71 KB/s doneupload: 'mon-dossier/photos/vacances.jpg' -> 's3://mon-bucket/backup/photos/vacances.jpg' [3 of 3] 15 of 15 100% in 0s 5.25 KB/s doneDone. Uploaded 69 bytes in 1.0 seconds, 69.00 B/s.Synchroniser S3 vers local
Section intitulée « Synchroniser S3 vers local »Le sens s'inverse en échangeant simplement source et destination : c'est la commande de restauration.
s3cmd sync s3://mon-bucket/backup/ ./restore/download: 's3://mon-bucket/backup/documents/notes.md' -> './restore/documents/notes.md' [1 of 3] 25 of 25 100% in 0s 22.01 KB/s donedownload: 's3://mon-bucket/backup/documents/rapport.txt' -> './restore/documents/rapport.txt' [2 of 3] 29 of 29 100% in 0s 37.31 KB/s donedownload: 's3://mon-bucket/backup/photos/vacances.jpg' -> './restore/photos/vacances.jpg' [3 of 3] 15 of 15 100% in 0s 21.96 KB/s doneDone. Downloaded 69 bytes in 1.0 seconds, 69.00 B/s.Exclure des fichiers
Section intitulée « Exclure des fichiers »Les motifs s'appliquent au chemin relatif de chaque fichier, et plusieurs --exclude peuvent être cumulés.
s3cmd sync mon-dossier/ s3://mon-bucket/backup/ --exclude '*.tmp' --exclude '*.log'Supprimer les fichiers obsolètes
Section intitulée « Supprimer les fichiers obsolètes »--delete-removed aligne la destination sur la source : ce qui a disparu localement est effacé côté serveur.
L'option --delete-removed supprime de la destination les fichiers qui n'existent plus dans la source :
s3cmd sync mon-dossier/ s3://mon-bucket/backup/ --delete-removedFonctionnalités avancées
Section intitulée « Fonctionnalités avancées »Ces commandes dépendent du service en face : le versioning, les tags et les URL signées font partie de l'API S3, mais toutes les implémentations compatibles ne les exposent pas. Vérifiez leur prise en charge avant de bâtir une procédure dessus.
Activer le versioning (v2.4.0)
Section intitulée « Activer le versioning (v2.4.0) »Une fois activé, le versioning conserve chaque révision d'un objet : la suppression pose alors un marqueur au lieu d'effacer, et l'espace facturé continue de croître.
s3cmd setversioning s3://mon-bucket enableGérer les tags (v2.4.0)
Section intitulée « Gérer les tags (v2.4.0) »Les tags servent à ventiler les coûts et à cibler des règles de cycle de vie sans toucher au nom des objets.
# Ajouter des tagss3cmd settagging s3://mon-bucket/fichier.txt "projet=devops" "env=prod"
# Voir les tagss3cmd gettagging s3://mon-bucket/fichier.txt
# Supprimer les tagss3cmd deltagging s3://mon-bucket/fichier.txtGénérer une URL signée
Section intitulée « Générer une URL signée »L'URL donne un accès temporaire et sans authentification à un objet privé, jusqu'à l'expiration indiquée.
s3cmd signurl s3://mon-bucket/fichier.txt +3600Cette commande génère une URL temporaire valide 1 heure (3600 secondes).
Définir les ACL
Section intitulée « Définir les ACL »Rendre un objet public le laisse lisible par quiconque connaît son URL, sans trace dans les journaux d'accès.
# Rendre un objet publics3cmd setacl s3://mon-bucket/fichier.txt --acl-public
# Rendre privés3cmd setacl s3://mon-bucket/fichier.txt --acl-privateDépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
SignatureDoesNotMatch | Mauvaise signature | Essayez signature_v2 = True dans .s3cfg |
Name or service not known | host_bucket incorrect | Utilisez le même host que host_base pour MinIO |
Access Denied | Credentials incorrects | Vérifiez access_key et secret_key |
Bucket already exists | Nom de bucket pris | Choisissez un nom unique |
The bucket is not empty | Bucket non vide | Videz avec s3cmd del s3://bucket/ --recursive |
À retenir
Section intitulée « À retenir »- Un seul outil pour tout : s3cmd gère upload, download, sync, ACL, versioning.
- Synchronisation incrémentale : seuls les fichiers modifiés sont transférés.
- Compatible tout S3 : AWS, MinIO, Outscale, Scaleway, DigitalOcean...
--dry-runtoujours : prévisualisez les sync/delete avant de les exécuter.- Configuration par fichier :
~/.s3cfgévite de répéter les credentials.
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- Site officiel : s3tools.org
- Documentation : s3tools.org/usage
- GitHub : github.com/s3tools/s3cmd