id = "s5cmd"
name = "s5cmd"
homepage = "https://github.com/peak/s5cmd"
description = "A high performance command-line tool for AWS S3 and local file systems."
executables = ["s5cmd"]
[dotfiles]
paths = ["~/.aws/config"]
secret = ["~/.aws/credentials"]
[commands]
format = 1
label = "s5cmd"
description = "Copy, sync and list S3 objects in parallel. Global options go before the subcommand; other subcommands (rm, mv, du, select) are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://github.com/peak/s5cmd/blob/master/README.md"
revision = "2026-10-27"
evidence = """
s5cmd --profile my-work-profile ls s3://my-company-bucket/
s5cmd --no-sign-request ls s3://public-bucket/
s5cmd --endpoint-url <gcs-endpoint> sync 'download_folder/*' s3://gcs-bucket/path/
s5cmd --dry-run cp s3://bucket/pre/* s3://another-bucket/
s5cmd --numworkers 10 cp '/Users/foo/bar/*' s3://mybucket/foo/bar/
"""
[[commands.field]]
id = "profile"
label = "AWS profile"
type = "string"
option = ["--profile"]
sources = ["readme"]
[[commands.field]]
id = "endpoint_url"
label = "Endpoint URL"
description = "For S3-compatible services."
type = "url"
option = ["--endpoint-url"]
sources = ["readme"]
[[commands.field]]
id = "no_sign_request"
label = "Anonymous requests"
type = "boolean"
option = ["--no-sign-request"]
sources = ["readme"]
[[commands.field]]
id = "dry_run"
label = "Dry run"
type = "boolean"
option = ["--dry-run"]
sources = ["readme"]
[[commands.field]]
id = "numworkers"
label = "Worker pool size"
type = "integer"
option = ["--numworkers"]
sources = ["readme"]
[[commands.group]]
id = "basic"
label = "Global"
fields = ["profile", "endpoint_url", "no_sign_request", "dry_run", "numworkers"]
[[commands.subcommand]]
path = ["cp"]
label = "Copy objects"
description = "Copy between local paths and S3, with wildcard support."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/peak/s5cmd/blob/master/README.md"
revision = "2026-10-27"
evidence = """
s5cmd cp 's3://bucket/logs/2020/03/*' .
s5cmd cp --flatten 's3://bucket/logs/2020/03/*' logs/
s5cmd cp --include "*.log" --include "request*" 's3://bucket/logs/2020/*' .
s5cmd cp --exclude "*.log" --exclude "*.txt" 's3://bucket/logs/2020/*' .
--source-region or --destination-region flags of cp command.
"""
[[commands.subcommand.field]]
id = "source"
label = "Source"
type = "string"
position = 0
min = 1
sources = ["readme"]
[[commands.subcommand.field]]
id = "destination"
label = "Destination"
type = "string"
position = 1
min = 1
sources = ["readme"]
[[commands.subcommand.field]]
id = "flatten"
label = "Flatten directory structure"
type = "boolean"
option = ["--flatten"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "include"
label = "Include pattern"
type = "string"
option = ["--include"]
multiple = true
sources = ["readme"]
[[commands.subcommand.field]]
id = "exclude"
label = "Exclude pattern"
type = "string"
option = ["--exclude"]
multiple = true
sources = ["readme"]
[[commands.subcommand.field]]
id = "source_region"
label = "Source region"
type = "string"
option = ["--source-region"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "destination_region"
label = "Destination region"
type = "string"
option = ["--destination-region"]
sources = ["readme"]
[[commands.subcommand.task]]
id = "copy"
label = "Copy"
fields = ["source", "destination", "flatten", "include", "exclude"]
required = ["source", "destination"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["source", "destination", "flatten"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["include", "exclude", "source_region", "destination_region"]
[[commands.subcommand]]
path = ["sync"]
label = "Synchronize"
description = "One-way sync from source to destination."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/peak/s5cmd/blob/master/README.md"
revision = "2026-10-27"
evidence = """
s5cmd sync --include "*.log" --exclude "access_*" --include "*.txt" 's3://bucket/logs/*' .
s5cmd sync --delete . s3://bucket/static/
With --size-only flag, it's possible to use the strategy that would only compare file sizes.
"""
[[commands.subcommand.field]]
id = "source"
label = "Source"
type = "string"
position = 0
min = 1
sources = ["readme"]
[[commands.subcommand.field]]
id = "destination"
label = "Destination"
type = "string"
position = 1
min = 1
sources = ["readme"]
[[commands.subcommand.field]]
id = "delete"
label = "Delete extra destination files"
type = "boolean"
option = ["--delete"]
effect = "delete"
sources = ["readme"]
[[commands.subcommand.field]]
id = "size_only"
label = "Compare sizes only"
type = "boolean"
option = ["--size-only"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "include"
label = "Include pattern"
type = "string"
option = ["--include"]
multiple = true
sources = ["readme"]
[[commands.subcommand.field]]
id = "exclude"
label = "Exclude pattern"
type = "string"
option = ["--exclude"]
multiple = true
sources = ["readme"]
[[commands.subcommand.task]]
id = "sync"
label = "Sync"
fields = ["source", "destination", "delete", "size_only", "include", "exclude"]
required = ["source", "destination"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["source", "destination", "delete"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["size_only", "include", "exclude"]
[[commands.subcommand]]
path = ["ls"]
label = "List objects"
description = "List buckets or objects."
[[commands.subcommand.source]]
id = "readme"
kind = "manual"
url = "https://github.com/peak/s5cmd/blob/master/README.md"
revision = "2026-10-27"
evidence = """
s5cmd ls s3://bucket/
"""
[[commands.subcommand.field]]
id = "target"
label = "S3 URL"
description = "Empty lists all buckets."
type = "string"
position = 0
min = 0
sources = ["readme"]
[[commands.subcommand.task]]
id = "list"
label = "List"
fields = ["target"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["target"]