Skip to main content

rclone Copyto

rclone copyto copies a source file or directory to a specific destination path. Unlike copy (which preserves directory structure), copyto lets you rename the file or place it at an exact path during the transfer.

Quick Summary

Use copyto when you need to copy one file to a specific filename at the destination. Use copy when you're copying directories or multiple files and want the structure preserved.

Basic Syntax

rclone copyto SOURCE DESTINATION [flags]
# Copy a single file to a specific remote path
rclone copyto /backup/db/dump.sql remote:backups/db/production-2024-01-15.sql

# Copy and rename a local file
rclone copyto config.yml remote:configs/app-config-v2.yml

# Copy between remotes with a new name
rclone copyto remoteA:data/export.csv remoteB:archive/export-final.csv

copyto vs copy

Scenariocopycopyto
Copy a directoryPreserves directory structureCopies contents into target path
Copy a single filePlaces file inside destination directoryRenames file to destination path
Best forBulk transfersSingle-file precision

Example Difference

# copy — puts dump.sql INSIDE the backups/ directory
rclone copy /backup/db/dump.sql remote:backups/
# Result: remote:backups/dump.sql

# copyto — renames the file at the destination
rclone copyto /backup/db/dump.sql remote:backups/prod-latest.sql
# Result: remote:backups/prod-latest.sql

Practical Examples

Upload Database Dump with Timestamp

DATE=$(date +%Y-%m-%d-%H%M)
rclone copyto /var/backups/db/latest.sql.gz \
remote:backups/db/dump-${DATE}.sql.gz --progress

Copy Config File to Remote

rclone copyto /etc/nginx/nginx.conf \
remote:configs/nginx/nginx-$(hostname).conf

Archive a Log File

rclone copyto /var/log/app/error.log \
remote:logs/$(date +%Y/%m)/error-$(date +%d).log

Copy SSL Certificate to Backup

rclone copyto /etc/letsencrypt/live/example.com/fullchain.pem \
remote:certs/example.com/fullchain-$(date +%Y%m%d).pem

Key Flags

FlagDescription
--dry-run / -nPreview without transferring
--progress / -PShow transfer progress
--no-traverseSkip directory listing (faster for single files)
--log-file PATHWrite log to file

Common Pitfalls

PitfallConsequencePrevention
Using copy when you need renamingFile keeps original nameUse copyto for renaming
Using copyto for directoriesUnexpected directory structureUse copy for directory transfers
Missing parent directory at remoteSome backends auto-create, others errorVerify with rclone mkdir first

What's Next

Examples with Output

1. Copy and rename a local file to remote

Upload a file with a specific target name. Command:

rclone copyto ./current_db.sql gdrive:db_backups/2024-01-15_final.sql

Output:

(No output on success)

2. Overwrite a remote file precisely

Replace a specific file on the remote. Command:

rclone copyto ./new_config.json remote:app/config.json -v

Output:

2024/01/15 12:00:00 INFO  : config.json: Copied (replaced existing)

3. Copy a subfolder to a new location

Target a specific path for directory contents. Command:

rclone copyto /local/src /remote/dest_folder

Output:

(All files in src copied directly into dest_folder)

4. Dry run for precise targeting

Ensure the rename will happen as expected. Command:

rclone copyto file.txt remote:new_name.txt --dry-run

Output:

2024/01/15 12:00:00 NOTICE: new_name.txt: Not copied as --dry-run is set

5. Skip directory traversal for speed

Fast copy when you know exactly where the file is. Command:

rclone copyto remote:source.file remote:dest.file --no-traverse

Output:

(Instant operation for single small files)