- Adjacent slashes in key are no longer removed when uploading to remote. Before
s5cmd cp file.txt s3://bucket/a//b///c/
would copy tos3://bucket/a/b/c/file.txt
but now tos3://bucket/a//b///c/file.txt
.(#459) --endpoint-url
will not accept URLs without scheme such asexample.com
. Instead, it will give an error and ask for an url with a scheme; eitherhttp://example.com
orhttps://example.com
(#496).
- Added
--content-type
and--content-encoding
flags tocp
command. (#264) - Added
--profile
flag to allow users to specify a named profile. (#353) - Added
--credentials-file
flag to allow users to specify path for the AWS credentials file instead of using the default location. - Added
bench.py
script under newbenchmark
folder to compare performances of two different builds of s5cmd. (#471) - Added
--all-versions
flag tols
,rm
,du
andselect
subcommands to apply operation on(/over) all versions of the objects. (#475) - Added
--version-id
flag tocat
,cp
/mv
,rm
,du
andselect
subcommands to apply operation on(/over) a specific versions of the object. (#475) - Added
bucket-version
command to configure bucket versioning. Bucket name alone returns the bucket versioning status of the bucket. Bucket versioning can be configured withset
flag. (#475) - Added
--raw
flag tocat
andselect
subcommands. It disables the wildcard operations. (#475)
-
Disable AWS SDK logger if log level is not
trace
. (##460) -
Allow adjacent slashes to be used as keys when uploading to remote. (#459)
-
Debian packages are provided on releases page (#380)
-
Upgraded minimum required Go version to 1.17.
-
The sync command uses
external sort
instead ofinternal
sort. This change reduces RAM usage from ~10 GB to ~1.5 GB forsync
operation of a directory containing 1,000,000 files at a cost of speed (20% slower for 1,000,000 objects). For smaller directories (~50,000 files) there is no significant change in speed. (#483) -
Improve auto-completion support of s5cmd for
zsh
andbash
, start supportingpwsh
and stop the support forfish
. Now s5cmd can complete bucket names, s3 keys in a bucket and the local files. However,install-completion
flag no longer installs the completion script to*rc
files instead it merely gives instructions to install autocompletion and provides the autocompletion script (#500).
- Fixed a bug where (
--stat
) prints unnecessarily when used with help and version commands (#452) - Changed cp error message to be more precise. "given object not found" error message now will also include absolute path of the file. (#463)
- Fixed a bug where some part of the destination path is removed by
cp
andsync
subcommands (#360) - Fixed a bug where proxy is not being used when
--no-verify-ssl
flag is used. (#445) - Fixed
unknown url format
error when object key also includess3://
e.g.s5cmd ls s3://foo/bar/s3://baz
(#449) - Fixed a bug where the local file created for the download operation was not deleted if the download fails in Windows. (#348)
- Dropped inline comment feature for
run
command. Previously s5cmd supported a command with an inline comment likels s3://bucket/object.gz # inline comment
. (#309) - Changed homebrew installation command on macOS. Users can install s5cmd via
brew install peak/tap/s5cmd
. (#356) - Print usage errors to stderr instead of stdout and do not show help text on usage error. (#399)
- Working directory of the Docker image changed to
/aws
from/
. (#412)
- Added
sync
command to synchronize two given buckets, prefixes, or objects. (#3) - Added AWS Single Sign-On (SSO) profiles support. (#385)
- Added
--force-glacier-transfer
flag toselect
command. (#346) - Added
--ignore-glacier-warnings
flag tocp
,mv
andselect
commands. (#346) - Added
--request-payer
flag to includex-amz-request-payer
in header while sending GET, POST and HEAD requests. (#297) @Kirill888 - Added
--use-list-objects-v1
flag to force using S3 ListObjects API instead of ListObjectsV2 API. (#405) @greenpau - Added trace log level(
--log=trace
) which enables SDK debug logs.(#363)
- Upgraded minimum required Go version to 1.16.
- Fixed a bug about precedence of region detection, which auto region detection would always override region defined in environment or profile. (#325)
- Fixed a bug where errors did not result a non-zero exit code. (#304)
- Print error if the commands file of
run
command is not accessible. (#410) - Updated region detection call to use current session's address resolving method (#314)
- Fixed a bug where lines with large tokens fail in
run
command.sync
was failing when it finds multiple files to remove. (#435, #436) - Print usage error if given log level(
--log
) is not valid. (#430) - Fixed a bug where (
--stat
) is ignored when log level is error. (#359)
- Added
select
command. It allows to select JSON records from objects using SQL expressions. (#299) @skeggse - Added
rb
command to remove buckets. (#303) - Added
--exclude
flag tocp
,rm
,ls
,du
andselect
commands. This flag allows users to exclude objects with given pattern. (#266) - Added
--raw
flag tocp
andrm
commands. It disables the wildcard operations. It is useful when an object contains glob characters which interfers with glob expansion logic. (#235) - Added
--cache-control
and--expires
flags tocp
andmv
commands. It adds support for setting cache control and expires header to S3 objects. (#318) @tombokombo - Added
--force-glacier-transfer
flag tocp
command. It forces a transfer request on all Glacier objects. (#206) - Added
--source-region
anddestination-region
flags tocp
command. It allows overriding bucket region. (#262) @kemege
- Added
MacPorts
installation option. (#311) @manojkarthick - Added
S3_ENDPOINT_URL
environment variable (#343) @Dexus - Prevent retries if a token related error is received (#337)
- Change the order of precedence in URL expansion in file system. Glob (*) expansion have precedence over directory expansion. (#322)
- Fixed data race for concurrent writes for expand (#330)
- Fixed concurrent writes to the flags list of run command (#335)
- Fixed options usage on mv command (#338)
- Added global
--no-sign-request
flag. API requests won't be signed and credentials won't be used if this option is provided. It is useful for accessing public buckets. (#285)
- If retryable errors are received during command execution, users now can see what's happening under the hood. (#261)
- Update documentation about the AWS_PROFILE environment variable. (#275) @davebiffuk
- Fixed a bug where write-bit was required to upload a file. (#258)
- Fixed a bug where object could not be found if S3 key contains certain special characters. (#279) @khacminh
s5cmd
exits with code1
if given command is not found. It was0
before. (#295)
- Statically link
s5cmd
in Docker image (#250)
With this release, s5cmd
automatically determines region information of destination buckets.
- Added global
--dry-run
option. It displays which command(s) will be executed without actually having a side effect. (#90) - Added
--stat
option fors5cmd
and it displays program execution statistics before the end of the program output. (#148) - Added cross-region transfer support. Bucket regions are inferred, thus, supporting cross-region transfers and multiple regions in batch mode. (#155)
- Fixed incorrect MIME type inference for
cp
, give priority to file extension for type inference. (#214) - Fixed error reporting issue, where some errors from the
ls
operation were not printed.
- Requests to different buckets not allowed in
rm
batch operation, i.e., throw an error. - AWS S3
RequestTimeTooSkewed
request error was not retryable before, it is now. (205) - For some operations errors were printed at the end of the program execution. Now, errors are displayed immediately after being detected. (#136)
- From now on, docker images will be published on Docker Hub. (#238)
- Changed misleading 'mirroring' examples in the help text of
cp
. (#213)
With this release, Windows is supported.
- Dropped storage class short codes display from default behaviour of
ls
operation. Instead, use-s
flag withls
to see full names of the storage classes when listing objects.
- Added Server-side Encryption (SSE) support for mv/cp operations. It uses customer master keys (CMKs) managed by AWS Key Management Service. (#18)
- Added an option to show full form of storage class when listing objects. (#165)
- Add access control lists (ACLs) support to enable managing access to buckets and objects. (#26)
- Fixed infinite repetition issue on mv/cp operations which would occur if the destination matched the source wildcard. (#168)
- Fixed windows filepath issue, where backslashes should be treated as the path delimiter. (#178)
- All tests pass on windows, by converting and treating file paths to UNIX filepath format.
- Fixed a transfer issue where the object path contains particular regex metacharacters. (#111) @brendan-matroid
- Correctly parse object paths that contain whitespaces in run-mode. (#111) @brendan-matroid
- Retry when connection closed by S3 unexpectedly. (#189) @eminugurkenar
This is a major release with many breaking changes.
- Dropped
get
command. Users could get the same effect withs5cmd cp <src> .
. - Dropped
nested command
support. - Dropped
!
command. It was used to execute shell commands and was used in conjunction with nested commands. s5cmd -f
ands5cmd -f -
usage has changed tos5cmd run
.run
command accepts a file. If not provided, it'll listen for commands from stdin.- Exit code for errors was
127
. It is1
now. - Dropped
exit
command. It was used to change the shell exit code and usually a part of the nested command usage. - Dropped local->local copy and move support. (#118)
- All error messages are sent to stderr now.
-version
flag is changed toversion
command.- Dropped
batch-rm
command. It was not listed in the help output. Now that we support variadic arguments, users can remove multiple objects by providing wildcards or multiple arguments tos5cmd rm
command. (#106) - Virtual host style bucket name
resolving
is enabled by default for S3 and GCS. If you provide a custom endpoint via
--endpoint-url
flag (other than GCS and S3 transfer acceleration),s5cmd
will fall back to thepath-style
. (#92) - Listing a non-existent object will return exit code
1
, instead of0
. (#23) -ds
,-dw
,-us
and-uw
global flags are no longer available. Multipart concurrency and part size flags are now part of thecp/mv
command. New replacement flags are--concurrency | -c
and--part-size | -p
. (#110)- s5cmd
cp
command follows symbolic links by default (only when uploading to s3 from local filesystem). Use--no-follow-symlinks
flag to disable this feature. (#17) - Dropped
-parents
flag from copy command. Copy behaviour has changed to preserve the directory hierarchy as a default. Optional-flatten
flag is added to flatten directory structure. (#107) - Dropped
-vv
verbosity flag.--log
flag is introduced.
- Added
mb
command to make buckets. (#25) - Added
--json
flag for JSON logging. (#22) - Added S3 transfer acceleration support. (#40)
- Added Google Cloud Storage support. (#81)
- Added
cat
command to print remote object contents to stdout (#20)
- Correctly set
Content-Type
of a file on upload operations. (#33) - Fixed a bug where workers are unable to consume job if there are too many outstanding wildcard expansion requests. (#12, #58)
- Pre-compiled binaries are provided on releases page (#21)
- AWS Go SDK is updated to support IAM role for service accounts. (#32)
- For copy/move operations,
s5cmd
now creates destination directory if missing. - Increase the soft limit of open files to 1000 and exits immediately when it encounters
too many open files
error. (#52)
- Use go modules.
- Update minimum required Go version to 1.13.
- Fix bug in brew install.
- Update travis configuration.
- Integrate Travis CI.
- Add option to disable SSL verification.
- Add endpoint url flag to support S3 compatible services.
- Use client's endpoint in GetSessionForBucket.
- Upgrade minimum required Go version to 1.7.
- Use 50mb chunks by default.
- Add human-readable output option -H.
- Implement "command -h".
- Refactor retryable error handling.
- Autodetect bucket region in command completion.
- Add HomeBrew formula.
- Add -s and -u options to overwrite files if sizes differ or files are lastly modified.
- Use constructor for *JobArgument.
- Add -dlw, -dlp and -ulw configuration options for worker pool.
- Fix get/cp without 2nd param or exact destination filename.
- Implement shell auto completion.
- Add context support for batch AWS requests.
- Implement "s5cmd get".
- Reduce idle-timer values.
- Add option -vv to log parser errors verbosely.
- Implement "du -g" to group by storage class.
- Use Go bool type instead of aws.Bool on recoverer.
- Make RequestError retryable.
- Implement verbose output (-vv flag).
- Add godoc for error types.