Skip to content

Migrating from rclone / aws s3 cp โ€‹

You are: already moving data to S3 with rclone or aws s3 cp, and you want the CargoShip equivalents plus a clear sense of when CargoShip is the right tool and when it isn't.

The short version: rclone and aws s3 cp upload one object per file. CargoShip groups files into compressed, sharded archives and writes a manifest โ€” far fewer S3 requests, built-in compression, deduplication, and incremental sync. That's a big win for archival and backup, and the wrong trade for serving individual files directly from S3.

The core difference โ€‹

rclone / aws s3 cpCargoShip
Storage layoutone S3 object per filecompressed tar.zst chunks + manifest
S3 requestsone (or more) per filea handful per upload
CompressionnoneZstandard, content-aware
Dedup / incrementallimited / hash-basedcontent dedup + manifest-based incremental
Individual file servingyes, directno โ€” restore first

rclone leaves files individually addressable in S3 (good for static hosting). CargoShip packs them, so you retrieve via cargoship restore rather than a plain GET. Choose based on whether you need direct file access.

Command mapping โ€‹

Basic upload โ€‹

bash
# rclone
rclone copy /local/path myremote:bucket/prefix

# aws cli
aws s3 cp /local/path s3://bucket/prefix/ --recursive

# CargoShip
cargoship upload /local/path s3://bucket/prefix/ --region us-west-2

Incremental sync โ€‹

bash
# rclone
rclone sync /local/path myremote:bucket/prefix

# CargoShip โ€” upload only new/changed files against a prior manifest
cargoship upload /local/path s3://bucket/prefix/ \
  --incremental --prev-manifest ./manifest.json.gz

For a dedicated sync workflow (including delete tracking) see Incremental sync.

Preview before uploading (dry-run) โ€‹

bash
# rclone
rclone copy /local/path myremote:bucket/prefix --dry-run

# CargoShip โ€” size, compression, cost, without touching S3
cargoship estimate /local/path --show-comparison

--show-comparison contrasts a naive per-file upload against CargoShip's chunking. See Estimating costs.

List and inspect โ€‹

bash
# rclone
rclone ls myremote:bucket/prefix

# CargoShip โ€” inspect an upload by its ID
cargoship info s3://bucket/prefix/uploads/<id>
cargoship list s3://bucket/prefix/uploads/<id> --pattern '*.log'

Download / restore โ€‹

bash
# rclone
rclone copy myremote:bucket/prefix /local/restore-path

# CargoShip โ€” whole upload, or a single file by path
cargoship restore s3://bucket/prefix/uploads/<id> /local/restore-path
cargoship restore s3://bucket/prefix/uploads/<id> /local/restore-path \
  --file path/to/one/file.txt

See Restoring files.

Config and environment โ€‹

rclone keeps remotes in rclone.conf. CargoShip uses the standard AWS credential chain โ€” no remote definitions to port:

bash
export AWS_REGION=us-west-2
export AWS_PROFILE=default

Named profiles are set via AWS_PROFILE (or --region for the region), not a CargoShip-specific config. See AWS setup and Config files & precedence.

Common patterns โ€‹

Daily backup script โ€‹

bash
# rclone
DATE=$(date +%F)
rclone sync /var/backups myremote:backups/$DATE --transfers 4 --progress

# CargoShip
DATE=$(date +%F)
cargoship upload /var/backups s3://backups/$DATE/ \
  --storage-class GLACIER_IR \
  --quiet

--quiet suppresses the progress UI for cron/logs; --storage-class GLACIER_IR sends rarely-touched backups to a cheaper class. Fewer requests and built-in compression are where the cost reduction comes from.

Large dataset upload โ€‹

bash
# rclone
rclone copy ./dataset myremote:ml-datasets/v1 --transfers 16 --multi-thread-streams 4

# CargoShip โ€” sharding is adaptive; override only to benchmark
cargoship upload ./dataset s3://ml-datasets/v1/ --shard-count 16

Leave the shard count on auto (it's tuned to your workload); the flag is there for benchmarking.

Limiting bandwidth โ€‹

CargoShip has no built-in --bwlimit. Constrain it at the OS level:

bash
# rclone
rclone copy ./data myremote:bucket/prefix --bwlimit 10M

# CargoShip via trickle (Linux/macOS)
trickle -s -u 10240 cargoship upload ./data s3://bucket/prefix/

When to keep rclone โ€‹

CargoShip doesn't replace rclone for every job. Keep rclone (or aws s3 cp) when you need:

  • Direct file serving โ€” static websites, objects fetched individually by other systems. CargoShip packs files into archives, so they aren't directly addressable.
  • Non-S3 clouds โ€” rclone speaks 40+ providers; CargoShip targets S3.
  • FUSE mounts or bidirectional sync with conflict resolution โ€” rclone features CargoShip doesn't have.

A hybrid setup is common: CargoShip for bulk archives and backups, rclone for web assets.

Accessing one file without a full restore โ€‹

The most common post-migration question โ€” "how do I get a single file back out?" โ€” has a first-class answer:

bash
cargoship restore s3://bucket/prefix/uploads/<id> ./out --file path/to/file.txt

No need to download whole archives or hand-extract tar.zst chunks.

Migration checklist โ€‹

  • [ ] Confirm the use case is archival/backup, not direct file serving.
  • [ ] Test on a small directory; compare cargoship estimate output to your bill.
  • [ ] Verify the round trip: cargoship verify then a cargoship restore.
  • [ ] Replace rclone/aws s3 cp calls in scripts with cargoship upload.
  • [ ] Add --project tags if you want cost reporting.

Next steps โ€‹