Skip to content
Latchkey

rclone copy: Upload Files to Any Cloud Storage

rclone copy copies new or changed files from a source to a destination remote, leaving existing destination files in place.

copy is the additive transfer: it never deletes at the destination, so it is the safe choice for pushing build artifacts to a bucket. The remote:path syntax works the same across S3, GCS, Azure Blob, and Backblaze B2.

What it does

rclone copy copies files from source to destination, skipping files that are already identical (by size and modification time or hash). Nothing at the destination is deleted, unlike rclone sync. Either side can be a local path or a remote:bucket/path.

Common usage

Terminal
rclone copy ./dist s3remote:my-bucket/site --transfers 16
rclone copy s3remote:my-bucket/cache ./cache --checkers 32
# copy a single file
rclone copyto ./build.tar.gz s3remote:artifacts/build-${GITHUB_SHA}.tar.gz

Options

FlagWhat it does
--transfers NNumber of file transfers to run in parallel (default 4)
--checkers NNumber of checks to run in parallel when comparing files (default 8)
-P / --progressShow live transfer progress
--dry-runShow what would be transferred without doing it
--exclude <pattern>Skip files matching the pattern
--s3-no-check-bucketSkip the bucket-exists check (needs only object permissions)

In CI

Raise --transfers and --checkers to saturate the runner network for many small files (uploading a static site or node_modules cache). Prefer OIDC or an instance role over static keys: set env_auth = true in the remote so rclone reads AWS_ROLE_ARN or the instance metadata rather than baking keys into config.

Common errors in CI

"directory not found" means the source path does not exist on the runner (a build step did not produce ./dist). "Failed to copy: AccessDenied: Access Denied" means the credentials lack s3:PutObject on the target prefix. "NoSuchBucket: The specified bucket does not exist" means a typo in the remote or wrong region. "didn't find section in config file" means the named remote is not defined; run rclone config or point RCLONE_CONFIG at the right file.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →