s3-tools
SKILL.md
S3 Tools Skill
S3-compatible storage operations using AWS CLI or compatible tools.
When to Use
- Upload files to S3
- Download files from S3
- List buckets and objects
- Manage S3 permissions
- Sync directories
Setup
Configure AWS CLI
# Configure with credentials
aws configure
# Or with specific profile
aws configure --profile myprofile
# Set environment variables
export AWS_ACCESS_KEY_ID="your-key"
export AWS_SECRET_ACCESS_KEY="your-secret"
export AWS_DEFAULT_REGION="us-east-1"
MinIO (Self-Hosted S3)
# Configure for MinIO
aws configure set aws_access_key_id minioadmin
aws configure set aws_secret_access_key minioadmin
aws configure set default.region us-east-1
# Use custom endpoint
aws --endpoint-url http://localhost:9000 s3 ls
Common Operations
List Buckets
# List all buckets
aws s3 ls
# List with creation date
aws s3 ls --recursive
List Objects
# List bucket contents
aws s3 ls s3://my-bucket/
# List recursively
aws s3 ls s3://my-bucket/ --recursive
# Filter by prefix
aws s3 ls s3://my-bucket/folder/
Upload Files
# Upload single file
aws s3 cp file.txt s3://my-bucket/
# Upload with metadata
aws s3 cp file.txt s3://my-bucket/ --content-type "text/plain"
# Upload folder
aws s3 cp ./folder s3://my-bucket/folder/ --recursive
# Set cache control
aws s3 cp file.html s3://my-bucket/ --cache-control "max-age=3600"
Download Files
# Download single file
aws s3 cp s3://my-bucket/file.txt ./
# Download folder
aws s3 cp s3://my-bucket/folder/ ./folder --recursive
# Download with specific version
aws s3 cp s3://my-bucket/file.txt ./ --version-id version-id
Delete Objects
# Delete single file
aws s3 rm s3://my-bucket/file.txt
# Delete folder
aws s3 rm s3://my-bucket/folder/ --recursive
# Delete with prefix
aws s3 rm s3://my-bucket/ --exclude "*" --include "*.log"
Sync
# Sync local to S3
aws s3 sync ./folder s3://my-bucket/folder/
# Sync S3 to local
aws s3 sync s3://my-bucket/folder/ ./folder
# Sync with deletion (remove files not in source)
aws s3 sync s3://my-bucket/folder/ ./folder --delete
# Sync with excludes
aws s3 sync ./folder s3://my-bucket/folder/ --exclude "*.tmp" --exclude ".git/*"
Presigned URLs
Generate Presigned URL
# Generate URL (default 1 hour)
aws s3 presign s3://my-bucket/file.txt
# With custom expiration
aws s3 presign s3://my-bucket/file.txt --expires-in 86400
# Upload presigned URL
aws s3 presign s3://my-bucket/file.txt --put
Bucket Operations
Create Bucket
# Create bucket
aws s3 mb s3://my-new-bucket
# Create in specific region
aws s3 mb s3://my-new-bucket --region us-west-2
Delete Bucket
# Delete empty bucket
aws s3 rb s3://my-bucket
# Force delete (remove all objects first)
aws s3 rb s3://my-bucket --force
Examples
Backup to S3
#!/bin/bash
# Daily backup script
DATE=$(date +%Y-%m-%d)
BUCKET="my-backups"
SOURCE="/data"
aws s3 sync "$SOURCE" "s3://$BUCKET/backup-$DATE/" \
--storage-class STANDARD_IA \
--exclude "*.tmp"
Clean Old Backups
# Delete backups older than 30 days
aws s3 ls s3://my-bucket/backups/ | while read -r date time size file; do
filedate=$(echo "$date" | tr -d '-')
if [ "$filedate" -lt "$(date -d '30 days ago' +%Y%m%d)" ]; then
aws s3 rm "s3://my-bucket/backups/$file" --recursive
fi
done
Set Public Access
# Make object publicly readable
aws s3 cp file.txt s3://my-bucket/ --acl public-read
# Make entire bucket public (use carefully!)
aws s3api put-bucket-acl --bucket my-bucket --grant-read 'uri="http://acs.amazonaws.com/groups/global/AllUsers"'
Useful Flags
| Flag | Description |
|---|---|
--recursive |
Process all files/dirs |
--dryrun |
Show what would happen |
--quiet |
Suppress output |
--storage-class |
Set storage tier |
--content-type |
Set MIME type |
--cache-control |
Set caching headers |
--acl |
Set access control |
Notes
- Use
aws s3apifor advanced operations - Consider using lifecycle policies for cost savings
- Enable versioning for important buckets
- Use IAM roles instead of access keys when possible
Weekly Installs
3
Repository
winsorllc/upgra…carnivalFirst Seen
Mar 1, 2026
Security Audits
Installed on
opencode3
gemini-cli3
claude-code3
github-copilot3
codex3
kimi-cli3