Skip to content

Object Storage CLI

Swift · OpenStack CLI · python-openstackclient

Manage containers and objects via the native OpenStack Swift CLI. For S3-compatible tools (aws-cli, s3cmd, rclone), see the S3 tools reference.

Containers

openstack container listList containers
openstack container show <name>Show container details and metadata
openstack container create <name>Create a container
openstack container delete <name>Delete an empty container
openstack container set --property <key>=<value> <name>Set container metadata

Objects

openstack object list <container>List objects in a container
openstack object show <container> <object>Show object metadata
openstack object create <container> <file>Upload an object
openstack object save <container> <object>Download an object
openstack object delete <container> <object>Delete an object

Examples

Upload files and manage containers

# Create a container
openstack container create my-files

# Upload a file
openstack object create my-files ./report.pdf

# List objects
openstack object list my-files
# +------------+-------+----------------------------------+
# | Name       | Bytes | Content Type                     |
# +------------+-------+----------------------------------+
# | report.pdf | 24576 | application/pdf                  |
# +------------+-------+----------------------------------+

# Download
openstack object save my-files report.pdf

# Set container metadata (e.g., make public)
openstack container set --property "X-Container-Read:.r:*" my-files

Bulk upload a directory

# Upload all files from a directory
for f in ./uploads/*; do
  openstack object create my-files "$f"
done

# Verify
openstack object list my-files -f table

Quake AI tips

S3 tools for bulk operations

For large-scale uploads or directory sync, aws-cli or rclone are significantly faster. See the S3 tools reference.

Container naming

Container names are project-scoped, not globally unique. Keep names short and descriptive.

Large objects

Objects over 5GB must use segmented upload. The Swift CLI handles this automatically with the --segment-size flag.

Related