{
  "id": "s3cmd",
  "name": "s3cmd",
  "homepage": "https://s3tools.org/s3cmd",
  "description": "A free command line tool and client for uploading, retrieving and managing data in Amazon S3.",
  "executables": [
    "s3cmd"
  ],
  "dotfiles": {
    "paths": [
      "~/.s3cfg"
    ],
    "exclude": [],
    "secret": [],
    "secret_paths": [
      {
        "file": "~/.s3cfg",
        "match": {
          "prefix": [
            "access_key",
            "secret_key",
            "access_token",
            "gpg_passphrase"
          ]
        }
      }
    ],
    "machine_lines": [
      {
        "file": "~/.s3cfg",
        "match": {
          "prefix": [
            "gpg_command",
            "ca_certs_file",
            "ssl_client_cert_file",
            "ssl_client_key_file",
            "cache_file"
          ]
        }
      }
    ]
  },
  "commands": {
    "format": 1,
    "label": "s3cmd",
    "description": "Sync, upload and list objects in S3-compatible storage. Other commands (buckets, ACLs, policies, CloudFront) and credential switches are left out; configure access with s3cmd --configure.",
    "quality": "ai-draft",
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": true,
      "short_bundles": false
    },
    "subcommand": [
      {
        "path": [
          "sync"
        ],
        "label": "Synchronize",
        "description": "Synchronize a directory tree to S3, from S3, or between buckets.",
        "source": [
          {
            "id": "man",
            "kind": "manual",
            "url": "https://github.com/s3tools/s3cmd/blob/master/s3cmd.1",
            "revision": "2026-10-27",
            "evidence": "s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] or s3://BUCKET[/PREFIX] LOCAL_DIR or s3://BUCKET[/PREFIX] s3://BUCKET[/PREFIX]\n-n, --dry-run\n--skip-existing\n--delete-removed\n--no-check-md5\n--exclude=GLOB\n--include=GLOB\n-P, --acl-public\n--progress\n"
          }
        ],
        "field": [
          {
            "id": "source",
            "label": "Source",
            "description": "Local directory or s3://BUCKET[/PREFIX].",
            "type": "string",
            "position": 0,
            "min": 1,
            "sources": [
              "man"
            ]
          },
          {
            "id": "destination",
            "label": "Destination",
            "description": "Local directory or s3://BUCKET[/PREFIX].",
            "type": "string",
            "position": 1,
            "min": 1,
            "sources": [
              "man"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "type": "boolean",
            "option": [
              "--dry-run",
              "-n"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "delete_removed",
            "label": "Delete removed files",
            "description": "Delete destination objects with no corresponding source file.",
            "type": "boolean",
            "option": [
              "--delete-removed"
            ],
            "effect": "delete",
            "sources": [
              "man"
            ]
          },
          {
            "id": "skip_existing",
            "label": "Skip existing",
            "type": "boolean",
            "option": [
              "--skip-existing"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "no_check_md5",
            "label": "Compare sizes only",
            "description": "Do not check MD5 sums; faster but may miss changed files.",
            "type": "boolean",
            "option": [
              "--no-check-md5"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "exclude",
            "label": "Exclude glob",
            "type": "string",
            "option": [
              "--exclude"
            ],
            "multiple": true,
            "sources": [
              "man"
            ]
          },
          {
            "id": "include",
            "label": "Include glob",
            "type": "string",
            "option": [
              "--include"
            ],
            "multiple": true,
            "sources": [
              "man"
            ]
          },
          {
            "id": "acl_public",
            "label": "Public-read ACL",
            "type": "boolean",
            "option": [
              "--acl-public",
              "-P"
            ],
            "sources": [
              "man"
            ]
          }
        ],
        "task": [
          {
            "id": "preview",
            "label": "Preview a sync",
            "set": {
              "dry_run": [
                true
              ]
            },
            "lock": [
              "dry_run"
            ],
            "fields": [
              "source",
              "destination",
              "dry_run",
              "delete_removed",
              "exclude",
              "include"
            ],
            "required": [
              "source",
              "destination"
            ]
          },
          {
            "id": "sync",
            "label": "Sync",
            "fields": [
              "source",
              "destination",
              "skip_existing",
              "delete_removed",
              "exclude",
              "include",
              "acl_public"
            ],
            "required": [
              "source",
              "destination"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "source",
              "destination",
              "dry_run",
              "delete_removed"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "skip_existing",
              "no_check_md5",
              "exclude",
              "include",
              "acl_public"
            ]
          }
        ]
      },
      {
        "path": [
          "put"
        ],
        "label": "Upload files",
        "description": "Put files into a bucket.",
        "source": [
          {
            "id": "man",
            "kind": "manual",
            "url": "https://github.com/s3tools/s3cmd/blob/master/s3cmd.1",
            "revision": "2026-10-27",
            "evidence": "s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]\n-n, --dry-run\n-f, --force\n-r, --recursive\n-P, --acl-public\n--storage-class=CLASS\n--progress\n"
          }
        ],
        "field": [
          {
            "id": "files",
            "label": "Files",
            "type": "path",
            "position": 0,
            "multiple": true,
            "min": 1,
            "path": {
              "kind": "any",
              "role": "input"
            },
            "sources": [
              "man"
            ]
          },
          {
            "id": "destination",
            "label": "Destination",
            "description": "s3://BUCKET[/PREFIX]",
            "type": "string",
            "position": 1,
            "min": 1,
            "sources": [
              "man"
            ]
          },
          {
            "id": "recursive",
            "label": "Recursive",
            "type": "boolean",
            "option": [
              "--recursive",
              "-r"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "type": "boolean",
            "option": [
              "--dry-run",
              "-n"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "force",
            "label": "Force overwrite",
            "type": "boolean",
            "option": [
              "--force",
              "-f"
            ],
            "effect": "overwrite",
            "sources": [
              "man"
            ]
          },
          {
            "id": "acl_public",
            "label": "Public-read ACL",
            "type": "boolean",
            "option": [
              "--acl-public",
              "-P"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "storage_class",
            "label": "Storage class",
            "type": "string",
            "option": [
              "--storage-class"
            ],
            "suggestions": [
              {
                "value": "STANDARD",
                "label": "Standard"
              },
              {
                "value": "STANDARD_IA",
                "label": "Standard-IA"
              },
              {
                "value": "GLACIER",
                "label": "Glacier"
              },
              {
                "value": "DEEP_ARCHIVE",
                "label": "Deep Archive"
              }
            ],
            "sources": [
              "man"
            ]
          }
        ],
        "task": [
          {
            "id": "upload",
            "label": "Upload files",
            "fields": [
              "files",
              "destination",
              "recursive",
              "acl_public",
              "storage_class"
            ],
            "required": [
              "files",
              "destination"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "files",
              "destination",
              "recursive",
              "dry_run"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "force",
              "acl_public",
              "storage_class"
            ]
          }
        ]
      },
      {
        "path": [
          "ls"
        ],
        "label": "List objects or buckets",
        "description": "List objects or buckets.",
        "source": [
          {
            "id": "man",
            "kind": "manual",
            "url": "https://github.com/s3tools/s3cmd/blob/master/s3cmd.1",
            "revision": "2026-10-27",
            "evidence": "s3cmd ls [s3://BUCKET[/PREFIX]]\n-r, --recursive\n-H, --human-readable-sizes\n"
          }
        ],
        "field": [
          {
            "id": "target",
            "label": "Bucket or prefix",
            "description": "s3://BUCKET[/PREFIX]; empty lists all buckets.",
            "type": "string",
            "position": 0,
            "min": 0,
            "sources": [
              "man"
            ]
          },
          {
            "id": "recursive",
            "label": "Recursive",
            "type": "boolean",
            "option": [
              "--recursive",
              "-r"
            ],
            "sources": [
              "man"
            ]
          },
          {
            "id": "human",
            "label": "Human-readable sizes",
            "type": "boolean",
            "option": [
              "--human-readable-sizes",
              "-H"
            ],
            "sources": [
              "man"
            ]
          }
        ],
        "task": [
          {
            "id": "list",
            "label": "List",
            "fields": [
              "target",
              "recursive",
              "human"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "target",
              "recursive",
              "human"
            ]
          }
        ]
      }
    ]
  }
}
