Skill Details
Back to Skills

/r2-storage

by junwatu

Cloudflare R2 Storage management — setup, upload, download, sync via rclone

View on GitHub

r2 ☁️

Cloudflare R2 Storage management using rclone.

Install

curl -fsSL https://rclone.org/install.sh | sudo bash

Credentials Required

Set R2_CONFIG in dashboard with this JSON format:

{
  "access_key_id": "YOUR_ACCESS_KEY_ID",
  "secret_access_key": "YOUR_SECRET_ACCESS_KEY",
  "endpoint": "https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com",
  "bucket": "your-bucket-name"
}

Get credentials from Cloudflare:

  1. Go to https://dash.cloudflare.com → R2
  2. Create API token with Object Read/Write/List permissions
  3. Copy Account ID (from R2 dashboard URL)
  4. Endpoint format: https://<account_id>.r2.cloudflarestorage.com

Setup

# Quick setup
r2-setup --config '{"access_key_id":"...","secret_access_key":"...","endpoint":"...","bucket":"..."}'

Or run interactively:

./skills/r2/scripts/setup.sh

Commands

Upload

r2-upload /path/to/file.txt              # Upload single file
r2-upload /path/to/folder/               # Upload folder contents
r2-upload /path/to/file.txt --bucket other-bucket  # Upload to specific bucket

Download

r2-download file.txt /local/path/        # Download single file
r2-download folder/ /local/              # Download folder
r2-download file.txt                     # Download to current dir

List

r2-ls                                    # List bucket contents
r2-ls my-bucket                          # List specific bucket
r2-ls --long                             # Long format with sizes

Sync (One-way)

r2-sync /local/folder/ r2:bucket/        # Local → R2
r2-sync r2:bucket/ /local/folder/        # R2 → Local
r2-sync /local/ r2:bucket/ --delete      # Mirror (delete extra files on dest)

Delete

r2-rm file.txt                           # Delete single file
r2-rm folder/                            # Delete folder contents
r2-purge my-bucket                       # Delete all files in bucket

Show Credentials

./skills/r2/scripts/show-creds.sh           # Human-readable
./skills/r2/scripts/show-creds.sh --raw     # JSON format for UI

Direct rclone Commands

# Copy files
rclone copy /local/file.txt r2:bucket/

# Sync with progress
rclone sync /local/ r2:bucket/ -P

# Check disk usage
rclone size r2:bucket

Config Location

  • Env config: ~/.config/r2/config.json (or dashboard R2_CONFIG)
  • rclone config: ~/.config/rclone/rclone.conf
  • Named remote: r2

Troubleshooting

403 Access Denied

Token lacks permissions. Update API token in Cloudflare with:

  • Object Read ✅
  • Object Write ✅
  • Object List ✅

Bucket Not Found

Create the bucket first:

rclone mkdir r2:bucket-name