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"] # s5cmd's official README says it uses the AWS SDK shared config and # credentials files, including ~/.aws/credentials for access keys. # https://github.com/peak/s5cmd [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 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"]