Amazon S3 Tools: Command Line S3 Client Software and S3 Backup

AWS S3 Command Line Clients for Windows, Linux, Mac. Backup to S3, upload, retrieve, query data on Amazon S3.

s3cmd 2.4.0 released

We have released s3cmd version 2.4.0:

  • Added "setversioning" command for versioning configuration
  • Added "settagging", "gettagging", and "deltagging" commands for bucket/object tagging
  • Added "setobjectretention" and "setobjectlegalhold" commands
  • Added "setownership" and "setblockpublicaccess" commands
  • Added "cfinval" command to request Cloudfront to invalidate paths
  • Added "--keep-dirs" option to have the folder structure preserved on remote side
  • Added --skip-destination-validation option for "setnotification" command
  • Added "--max-retries" flag and "max_retries" config option
  • Added FIPS support
  • Added "object ownership" and block public access" values to "info" command output for buckets
  • Added to "ls" command a "DIROBJ" tag for directory objects in S3 remote
  • Added server profiles to to skip tests depending on the server type
  • Fixed "TypeError: sequence item 1: expected str instance, bytes found" error with Python 3.12
  • Fixed a missing return for "object_batch_delete" of
  • Fixed "object is not callable" error because of md5 FIPS test
  • Fixed "compute_content_md5 is not defined" error for "setversioning"
  • Fixed list objects to use NextMarker when only prefixes are returned
  • Fixed upload to not retry when an S3 compatible server is full
  • Fixed recursive delete of objects named with whitespace
  • Fixed the mime type when uploading directories to be "application/x-directory"
  • Fixed "string indices must be integers" error for sync when in dry-run mode
  • Fixed SignatureDoesNotMatch error when modifying an object on Cloudflare R2
  • Fixed Cloudfront invalidation issue for paths with wildcard or special characters
  • Fixed Cloudfront crash because of error reporting for retries
  • Fixed Cloudfront "unable to parse URL" error
  • Improved the handling of "empty" files on the remote side to sync with local folders
  • Improved "abortmp" command by requiring an object to avoid bad accidents when using Ceph
  • Improved file download by retrying when encountering SlowDown or TooManyRequests errors
  • Improved error messages in case of connection error or host unreachable
  • Improved error messages to be more explicit for upload errors after retries
  • Improved remote2local attributes setting code
  • Improved remote2local with more explicit error messages when setting attributes
  • Improved remote2local output messages by using the "mkdir" prefix instead of "make dir"
  • Improved the SortedDict class
  • Improved by using "--include" when calling Curl instead of "-include"
  • Improved GitHub CI by enabling pip cache in actions/setup-python
  • Improved GitHub CI by adding a "codespell" check on push and PRs
  • Updated GitHub CI tests to use more recent versions of Minio and Python
  • Upgraded GitHub actions
  • Cleanup and update of copyright headers, docs, comments and
  • Cleanup to fix "invalid escape sequence" syntax warnings
  • Many other bug fixes and cleanups

Download from here:

Source code also available on GitHub:

Dec 12, 2023

s3cmd 2.3.0 released

We have released s3cmd version 2.3.0:

  • Added "getnotification", "setnotification", and "delnotification" commands for notification policies
  • Added support for AWS_STS_REGIONAL_ENDPOINTS
  • Added ConnectionRefused [111] exit code to handle connection errors
  • Added support for IMDSv2. Should work automatically on ec2
  • Added --list-allow-unordered to list objects unordered. Only supported by Ceph based s3-compatible services
  • Fixed --exclude dir behavior for python >= 3.6
  • Fixed Cloudfront invalidate retry issue
  • Fixed 0 byte cache files crashing s3cmd
  • Fixed --continue behavior for the "get" command
  • Fixed unicode issue with fixbucket
  • Fixed CannotSendRequest and ConnectionRefusedError errors at startup
  • Fixed error reporting for object info when the object does not exist
  • Fixed " test" to do nothing to avoid failure that could be problematic for distribution packaging
  • Improved expire command to use Rule/Filter/Prefix for LifecycleConfiguration
  • Improved PASS/CHECK/INCLUDE/EXCLUDE debug log messages
  • Improved with python 3.9 and 3.10 support info
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

Oct 4, 2022

s3cmd 2.2.0 released

We have released s3cmd version 2.2.0:

  • Added support for metadata modification of files bigger than 5 GiB
  • Added support for remote copy of files bigger than 5 GiB using MultiPart copy (Damian Martinez, Florent Viard)
  • Added progress info output for multipart copy and current-total info in output for cp, mv and modify
  • Added support for all special/foreign character names in object names to cp/mv/modify
  • Added support for SSL authentication (Aleksandr Chazov)
  • Added the http error 429 to the list of retryable errors
  • Added support for listing and resuming of multipart uploads of more than 1000 parts
  • Added time based expiration for idle pool connections in order to avoid random broken pipe errors
  • Added support for STS webidentity authentication (ie AssumeRole and AssumeRoleWithWebIdentity) (Samskeyti, Florent Viard)
  • Added support for custom headers to the mb command (Sébastien Vajda)
  • Improved MultiPart copy to preserve acl and metadata of objects
  • Improved the server errors catching and reporting for cp/mv/modify commands
  • Improved resiliency against servers sending garbage responses
  • Improved remote copy to have consistent copy of metadata in all cases: multipart or not, aws or not
  • Improved security by revoking public-write acl when private acl is set (ruanzitao)
  • Improved speed when running on an EC2 instance (Patrick Allain)
  • Reduced connection_max_age to 5s to avoid broken pipes as AWS closes https conns after around 6s
  • Ensure that KeyboardInterrupt are always properly raised
  • Changed sized of multipart copy chunks to 1 GiB
  • Fixed ValueError when using more than one ":" inside add_header in config file
  • Fixed extra label issue when stdin used as source of a MultiPart upload
  • Fixed remote copy to allow changing the mime-type (ie content-type) of the new object
  • Fixed remote_copy to ensure that meta-s3cmd-attrs will be set based on the real source and not on the copy source
  • Fixed deprecation warnings due to invalid escape sequences (Karthikeyan Singaravelan)
  • Fixed getbucketinfo that was broken when the bucket lifecycle uses the filter element (Liu Lan)
  • Fixed RestoreRequest XML namespace URL (Akete)
  • Fixed PARTIAL exit code that was not properly set when needed for object_get
  • Fixed a possible infinite loop when a file is truncated during hashsum or upload (Matthew Krokosz, Florent Viard)
  • Fixed report_exception wrong error when LANG env var was not set
  • Fixed wrong wiki url in error messages (Alec Barrett)
  • Py3: Fixed an AttributeError when using the "files-from" option
  • Py3: Fixed compatibility issues due to the removal of getchildren() from ElementTree in python 3.9 (Budai)
  • Py3: Fixed compatibility issues due to the removal of encodestring() in python 3.9 (Kentaro Kaneki)
  • Fixed a crash when the AWS_ACCESS_KEY env var is set but not AWS_SECRET_KEY
  • Cleanup of check_md5 (Riccardo Magliocchetti)
  • Removed legacy code for dreamhost that should be necessary anymore
  • Migrated CI tests to use github actions (Arnaud J)
  • Improved README with a link to (Sia Karamalegos)
  • Improved help content (Dmitrii Korostelev, Roland Van Laar)
  • Improvements for setup and build configurations
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

27 Sep 2021

s3cmd 2.1.0 released

We have released s3cmd version 2.1.0:

  • Changed size reporting using k instead of K as it a multiple of 1024 (#956)
  • Added "public_url_use_https" config to generate public url using https (#551, #666) (Jukka Nousiainen)
  • Added option to make connection pooling configurable and improvements (Arto Jantunen)
  • Added support for path-style bucket access to signurl (Zac Medico)
  • Added docker configuration and help to run test cases with multiple Python versions (Doug Crozier)
  • Relaxed limitation on special chars for --add-header key names (#1054)
  • Fixed all regions that were automatically converted to lower case (Harshavardhana)
  • Fixed size and alignment of DU and LS output reporting (#956)
  • Fixes for SignatureDoesNotMatch error when host port 80 or 443 is specified, due to stupid servers (#1059)
  • Fixed the useless retries of requests that fail because of ssl cert checks
  • Fixed a possible crash when a file disappears during cache generation (#377)
  • Fixed unicode issues with IAM (#987)
  • Fixed unicode errors with bucked Policy/CORS requests (#847) (Alex Offshore)
  • Fixed unicode issues when loading aws_credential_file (#989)
  • Fixed an issue with the tenant feature of CephRGW. Url encode bucket_name for path-style requests (#1080)
  • Fixed signature v2 always used when bucket_name had special chars (#1081)
  • Allow to use signature v4 only, even for commands without buckets specified (#1082)
  • Fixed small open file descriptor leaks.
  • Py3: Fixed hash-bang in headers to not force using python2 when setup/s3cmd/run-test scripts are executed directly.
  • Py3: Fixed unicode issues with Cloudfront (#1006)
  • Py3: Fixed http.client.RemoteDisconnected errors (#1014) (Ryan Huddleston)
  • Py3: Fixed 'dictionary changed size during iteration' error when using a cache-file (#945) (Doug Crozier)
  • Py3: Fixed the display of file sizes (Vlad Presnyak)
  • Py3: Python 3.8 compatibility fixes (Konstantin Shalygin)
  • Py2: Fixed unicode errors sometimes crashing remote2remote sync (#847)
  • Added s3cmd.egg-info to .gitignore (Philip Dubé)
  • Improved run-test script to not use hard-coded bucket names(#1066) (Doug Crozier)
  • Renamed INSTALL to and improvements (Nitro, Prabhakar Gupta)
  • Improved the restore command help (Hrchu)
  • Updated the storage-class command help with the recent aws s3 classes (#1020)
  • Fixed typo in the --continue-put help message (Pengyu Chen)
  • Fixed typo (#1062) (Tim Gates)
  • Improvements for setup and build configurations
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

7 Apr 2020

s3cmd 2.0.2 released

We have released s3cmd version 2.0.2:

  • Fixed unexpected timeouts encountered during requests or transfers due to AWS strange connection short timeouts (#941)
  • Fixed a throttle issue slowing down too much transfers in some cases (#913)
  • Added support for $AWS_PROFILE (#966) (Taras Postument)
  • Added clarification comment for the socket_timeout configuration value OS limit
  • Avoid distutils usage at runtime (Matthias Klose)
  • Python 2 compatibility: Fixed import error of which with fallback code (Gianfranco Costamagna)
  • Fixed Python 3 bytes string encoding when getting IAM credentials (Alexander Allakhverdiyev)
  • Fixed handling of config tri-state bool values (like acl_public) (Brian C. Lane)
  • Fixed V2 signature when restore command is used (Jan Kasiak)
  • Fixed setting full_control on objects with public read access (Matthew Vernon)
  • Fixed a bug when only one path is supplied with Cloudfront. (Mikael Svensson)
  • Fixed signature errors with 'modify' requests (Radek Simko)
  • Fixes #936 - Fix setacl command exception (Robert Moucha)
  • Fixes error reporting if deleting a source object failed after a move (#929)
  • Many other bug fixes (#525, #933, #940, #947, #957, #958, #960, #967)
  • Important info: AWS S3 doesn't allow anymore uppercases and underscores in bucket names since march 1, 2018.

Download from here:

Source code also available on GitHub:

21 Jul 2018

s3cmd 2.0.1 released

We have released s3cmd version 2.0.1:

  • Support for Python 3 is now stable
  • Fixed signature issues due to upper-case in hostname
  • Improved support for Minio Azure gateway (Julien Maitrehenry, Harshavardhana)
  • Added signurl_use_https option to use https prefix for signurl (Julien Recurt)
  • Fixed a lot of remaining issues and regressions for Python 3 support
  • Fixed --configure option with Python 3
  • Fixed non string cmdline parameters being ignored
  • Windows support fixes
  • Don't force anymore to have a / on last parameter for the "modify" command
  • Detect and report error 403 in getpolicy for info command
  • Added a specific error message when getting policy by non-owner
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

25 Oct 2017

s3cmd 2.0.0 released

We have released s3cmd version 2.0.0:

  • Added support for Python 3 (Shaform, Florent Viard)
  • Added getlifecycle command (Daniel Gryniewicz)
  • Added --cf-inval for invalidating multiple CF distributions (Joe Mifsud)
  • Added --limit to "ls" and "la" commands to return the specified number of objects (Masashi Ozawa)
  • Added --token-refresh and --no-token-refresh and get the access token from the environment (Marco Jakob)
  • Added --restore-priority and --restore-days for S3 Glacier (Robert Palmer)
  • Fixed requester pays header with HEAD requests (Christian Rodriguez)
  • Don't allow mv/cp of multiple files to single file (Guy Gur-Ari)
  • Generalize wildcard certificate forgiveness (Mark Titorenko)
  • Multiple fixes for SSL connections and proxies
  • Added support for HTTP 100-CONTINUE
  • Fixes for s3-like servers
  • Big cleanup and many unicode fixes
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

01 July 2017

s3cmd 1.6.1 released

We have released s3cmd version 1.6.1:

  • Added --host and --host-bucket
  • Added --stats
  • Fix for newer python 2.7.x SSL library updates
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

21 Jan 2016

s3cmd 1.6.0 released

We have released s3cmd version 1.6.0:

  • Support signed URL content disposition type
  • Added 'ls -l' long listing including storage class
  • Added --limit-rate=RATE
  • Added --server-side-encryption-kms-id=KEY_ID
  • Added --storage-class=CLASS
  • Added --requester-pays, [payer] command
  • Added --[no-]check-hostname
  • Added --stop-on-error, removed --ignore-failed-copy
  • Added [setcors], [delcors] commands
  • Added support for cn-north-1 region hostname checks
  • Output strings may have changed. Scripts calling s3cmd expecting specific text may need to be updated
  • HTTPS is now the default
  • Many unicode fixes
  • Many other bug fixes

Download from here:

Source code also available on GitHub:

18 Sep 2015

s3cmd 1.5.2 released

We have released s3cmd version 1.5.2:

  • Various bug fixes (Matt Domsch, Andrew Gaul, Chris Lamb, Luke Winslow)

Download from here:

Source code also available on GitHub:

10 Feb 2015

s3cmd 1.5.0 released

We have released s3cmd version 1.5.0:

  • Added support for newer regions such as Frankfurt that require newer authorization signature v4 support (Vasileios Mitrousis, Michal Ludvig, Matt Domsch)
  • Dropped support for Python 2.4 due to signature v4 code. Python 2.6 is now the minimum, and Python 3 is still not supported.
  • Handle redirects to the "right" region for a bucket.
  • Added --ca-cert=FILE for self-signed certs (Matt Domsch)
  • Allow proxied SSL connections with Python >= 2.7 (Damian Gerow)
  • Added --remove-headers for [modify] command (Matt Domsch)
  • Added -s/--ssl and --no-ssl options (Viktor Szakáts)
  • Added --signature-v2 for backwards compatibility with S3 clones.
  • Various bug fixes by 17 contributors

.... and by the way... in 2014 s3cmd was downloaded 1,563,643 times from SourceForge!

Download from here:

The most up to date source code is available on GitHub:

12 Jan 2015

s3cmd 1.5.0-rc1 released

We have released s3cmd version 1.5-rc1, in preparation for a final 1.5.0 release, with all changes, fixes and improvements implemented since 1.5 beta.

Download from here:

The most up to date source code is available on GitHub:

29 Jun 2014

s3cmd 1.5.0 prerelease packages in Fedora, RHEL, CentOS, Debian

In an effort to get additional users testing the 1.5.0 codebase, in preparation for a final 1.5.0 release, new packages have been published for Fedora, RHEL, CentOS, and Debian. You may wish to use these, rather than each distribution’s primary release repositories.

In Fedora, you can find a release slightly newer than 1.5.0-beta1 in the updates-testing repository for Fedora 18, 19, 20, and rawhide.

$ sudo yum --enablerepo updates-testing install s3cmd

In EPEL (Red Hat Enterprise Linux RHEL, CentOS, etc) you can find a release slightly newer than 1.5.0-beta1 in the updates-testing repository for EPEL 6 and beta/7. Please note that EPEL must be installed for this to work.

$ sudo yum --enablerepo epel-testing install s3cmd

In Debian, you can find a release slightly newer than 1.5.0-beta1 in the Experimental repository

20 Feb 2014

s3cmd 1.5.0-beta1 available

Released 1.5.0-beta1 on 1-December-2013.

You can download it from:

Since 1.5.0-alpha1, there have been a lot of changes – mostly bug fixes. Please use -beta1, or the github master branch.

s3cmd 1.5.0-alpha1 released

s3cmd 1.5.0-alpha1 is now available

Big thanks to Matt Domsch for integrating many pull requests over the year into his Fedora version of s3cmd. This s3cmd 1.5.0-alpha1 is very much based on his outstanding work.

And of course many thanks and a big sorry to all the contributors who submitted new features and bug fixes and were left without a response, wondering if their work is ever going to be merged back into the official s3cmd codebase. Sorry guys, this indeed wasn’t a prime example of a project maintainership :(

So what has changed since 1.1.0-beta3 released a year ago?

s3cmd 1.5.0-alpha1

  • Server-side copy for hardlinks/softlinks to improve performance (Matt Domsch)
  • New [signurl] command (Craig Ringer)
  • Improved symlink-loop detection (Michal Ludvig)
  • Add —delete-after option for sync (Matt Domsch)
  • Handle empty return bodies when processing S3 errors. (Kelly McLaughlin)
  • Upload from STDIN (Eric Connell)
  • Updated bucket locations (Stefhen Hovland)
  • Support custom HTTP headers (Brendan O’Connor, Karl Matthias)
  • Improved MIME support (Karsten Sperling, Christopher Noyes)
  • Added support for —acl-grant/—acl-revoke to ‘sync’ command (Michael Tyson)
  • CloudFront: Support default index and default root invalidation (Josep del Rio)
  • Command line options for access/secret keys (Matt Sweeney)
  • Support [setpolicy] for setting bucket policies (Joe Fiorini)
  • Respect the $TZ environment variable (James Brown)
  • Reduce memory consumption for [s3cmd du] (Charlie Schluting)
  • Rate limit progress updates (Steven Noonan)
  • Download from S3 to a temp file first (Sumit Kumar)
  • Reuse a single connection when doing a bucket list (Kelly McLaughlin)
  • Delete empty files if object_get() failed (Oren Held)

That’s a lot of changes all around the codebase. Although s3cmd passes the testsuite and works in the common usecases I’m afraid we may have missed some corner cases. Please report any problems you experience when running s3cmd 1.5.0-alpha1 to make the final release as stable as possible.

Download from here:

The most up to date source code is available on GitHub:

Top   Home

Copyright© 2009-2024, all rights reserved. Privacy Policy