Aller au contenu
Cloud medium

Gérer vos buckets S3 avec s3cmd

10 min de lecture

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 S3
  • sync : synchroniser un dossier local avec un bucket (incrémental)
  • mb/rb : créer et supprimer des buckets
  • ls : lister buckets et objets
  • cp/mv/del : copier, déplacer, supprimer des objets

Via pip (recommandé pour avoir la dernière version) :

Fenêtre de terminal
pip install s3cmd==2.4.0

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

Fenêtre de terminal
# Debian/Ubuntu
sudo apt install s3cmd
# Fedora/RHEL
sudo dnf install s3cmd

Vérifiez l’installation :

Fenêtre de terminal
s3cmd --version
Sortie attendue
s3cmd version 2.4.0

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…).

  1. Démarrez minikube (si ce n’est pas déjà fait) :

    Fenêtre de terminal
    minikube start
  2. Déployez MinIO :

    Fenêtre de terminal
    minikube kubectl -- create namespace minio
    minikube 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"
  3. Exposez le service :

    Fenêtre de terminal
    minikube kubectl -- expose pod minio -n minio \
    --port=9000 --target-port=9000 --type=NodePort --name=minio-api
  4. 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

Lancez l’assistant de configuration :

Fenêtre de terminal
s3cmd --configure

L’assistant vous demande :

  • Access Key : votre clé d’accès (ex: minioadmin pour 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:31019 pour MinIO)

Pour MinIO ou un stockage compatible, créez directement le fichier ~/.s3cfg :

~/.s3cfg
[default]
access_key = minioadmin
secret_key = minioadmin
host_base = 192.168.49.2:31019
host_bucket = 192.168.49.2:31019
use_https = False
signature_v2 = True

Pour Outscale Object Storage :

~/.s3cfg
[default]
access_key = VOTRE_ACCESS_KEY
secret_key = VOTRE_SECRET_KEY
host_base = oos.eu-west-2.outscale.com
host_bucket = %(bucket)s.oos.eu-west-2.outscale.com
use_https = True
signature_v2 = False
website_endpoint = https://%(bucket)s.oos-website.eu-west-2.outscale.com/
Fenêtre de terminal
s3cmd mb s3://mon-bucket
Sortie
Bucket 's3://mon-bucket/' created
Fenêtre de terminal
s3cmd ls
Sortie
2026-01-23 14:18 s3://mon-bucket
2026-01-23 13:39 s3://autre-bucket
Fenêtre de terminal
s3cmd info s3://mon-bucket
Sortie
s3://mon-bucket/ (bucket):
Location: us-east-1
Payer: BucketOwner
Versioning:none
Expiration rule: none
Policy: none
CORS: none
ACL: CanonicalUser: FULL_CONTROL
Fenêtre de terminal
# Le bucket doit être vide
s3cmd rb s3://mon-bucket
Sortie
Bucket 's3://mon-bucket/' removed
Fenêtre de terminal
s3cmd put rapport.txt s3://mon-bucket/
Sortie
upload: 'rapport.txt' -> 's3://mon-bucket/rapport.txt' [1 of 1]
29 of 29 100% in 0s 6.47 KB/s done
Fenêtre de terminal
s3cmd put *.pdf s3://mon-bucket/documents/
Fenêtre de terminal
s3cmd put --recursive mon-dossier/ s3://mon-bucket/backup/
Fenêtre de terminal
s3cmd get s3://mon-bucket/rapport.txt ./
Sortie
download: 's3://mon-bucket/rapport.txt' -> './rapport.txt' [1 of 1]
29 of 29 100% in 0s 32.93 KB/s done
Fenêtre de terminal
s3cmd get --recursive s3://mon-bucket/backup/ ./restore/
Fenêtre de terminal
s3cmd ls s3://mon-bucket/
Sortie
2026-01-23 14:19 25 s3://mon-bucket/documents/notes.md
2026-01-23 14:19 29 s3://mon-bucket/documents/rapport.txt
Fenêtre de terminal
s3cmd ls -r s3://mon-bucket/
Sortie
2026-01-23 14:19 25 s3://mon-bucket/backup/documents/notes.md
2026-01-23 14:19 29 s3://mon-bucket/backup/documents/rapport.txt
2026-01-23 14:19 15 s3://mon-bucket/backup/photos/vacances.jpg
Fenêtre de terminal
s3cmd du s3://mon-bucket/
Sortie
98 4 objects s3://mon-bucket/
Fenêtre de terminal
s3cmd cp s3://mon-bucket/rapport.txt s3://mon-bucket/archives/rapport.txt
Sortie
remote copy: 's3://mon-bucket/rapport.txt' -> 's3://mon-bucket/archives/rapport.txt' [1 of 1]
Fenêtre de terminal
s3cmd cp s3://source-bucket/fichier.txt s3://dest-bucket/fichier.txt
Fenêtre de terminal
s3cmd mv s3://mon-bucket/ancien.txt s3://mon-bucket/nouveau.txt
Fenêtre de terminal
s3cmd del s3://mon-bucket/fichier.txt
Sortie
delete: 's3://mon-bucket/fichier.txt'
Fenêtre de terminal
s3cmd del s3://mon-bucket/ --recursive --force
Sortie
delete: 's3://mon-bucket/archives/rapport.txt'
delete: 's3://mon-bucket/backup/documents/notes.md'
delete: 's3://mon-bucket/backup/documents/rapport.txt'

La synchronisation est la fonctionnalité la plus puissante de s3cmd. Elle compare les fichiers et ne transfère que les modifications.

Fenêtre de terminal
s3cmd sync mon-dossier/ s3://mon-bucket/backup/
Sortie
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 done
upload: '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 done
upload: '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 done
Done. Uploaded 69 bytes in 1.0 seconds, 69.00 B/s.
Fenêtre de terminal
s3cmd sync s3://mon-bucket/backup/ ./restore/
Sortie
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 done
download: 's3://mon-bucket/backup/documents/rapport.txt' -> './restore/documents/rapport.txt' [2 of 3]
29 of 29 100% in 0s 37.31 KB/s done
download: 's3://mon-bucket/backup/photos/vacances.jpg' -> './restore/photos/vacances.jpg' [3 of 3]
15 of 15 100% in 0s 21.96 KB/s done
Done. Downloaded 69 bytes in 1.0 seconds, 69.00 B/s.
Fenêtre de terminal
s3cmd sync mon-dossier/ s3://mon-bucket/backup/ --exclude '*.tmp' --exclude '*.log'

L’option --delete-removed supprime de la destination les fichiers qui n’existent plus dans la source :

Fenêtre de terminal
s3cmd sync mon-dossier/ s3://mon-bucket/backup/ --delete-removed
Fenêtre de terminal
s3cmd setversioning s3://mon-bucket enable
Fenêtre de terminal
# Ajouter des tags
s3cmd settagging s3://mon-bucket/fichier.txt "projet=devops" "env=prod"
# Voir les tags
s3cmd gettagging s3://mon-bucket/fichier.txt
# Supprimer les tags
s3cmd deltagging s3://mon-bucket/fichier.txt
Fenêtre de terminal
s3cmd signurl s3://mon-bucket/fichier.txt +3600

Cette commande génère une URL temporaire valide 1 heure (3600 secondes).

Fenêtre de terminal
# Rendre un objet public
s3cmd setacl s3://mon-bucket/fichier.txt --acl-public
# Rendre privé
s3cmd setacl s3://mon-bucket/fichier.txt --acl-private
ProblèmeCause probableSolution
SignatureDoesNotMatchMauvaise signatureEssayez signature_v2 = True dans .s3cfg
Name or service not knownhost_bucket incorrectUtilisez le même host que host_base pour MinIO
Access DeniedCredentials incorrectsVérifiez access_key et secret_key
Bucket already existsNom de bucket prisChoisissez un nom unique
The bucket is not emptyBucket non videVidez avec s3cmd del s3://bucket/ --recursive
  • 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-run toujours : prévisualisez les sync/delete avant de les exécuter.
  • Configuration par fichier : ~/.s3cfg évite de répéter les credentials.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.