rclone Move
rclone move copies files from source to destination and deletes the source files after each file is successfully transferred. It's the rclone equivalent of cutting and pasting files.
After a successful transfer, source files are deleted. Unlike copy, this is not reversible unless you have a separate backup. Use copy + verify + manual delete for critical data.
Basic Syntax
rclone move SOURCE DESTINATION [flags]
# Move local files to remote
rclone move /srv/exports remote:archive/exports --progress
# Move remote files to local
rclone move remote:staging/data /srv/incoming --progress
# Move between remotes
rclone move remoteA:outbox remoteB:inbox --progress
Key Flags
| Flag | Description |
|---|---|
--dry-run / -n | Preview what would be moved |
--progress / -P | Show real-time progress |
--delete-empty-src-dirs | Remove empty directories from source after move |
--transfers N | Parallel transfers (default 4) |
--bwlimit RATE | Bandwidth limit |
--min-age DURATION | Only move files older than this |
--max-age DURATION | Only move files newer than this |
--include PATTERN | Only move matching files |
--exclude PATTERN | Skip matching files |
--log-file PATH | Write transfer log |
Practical Examples
Drain an Export Directory
# Move processed exports to cloud archive, clean up source
rclone move /srv/exports remote:archive/exports/ \
--delete-empty-src-dirs --progress
Archive Old Log Files
# Move log files older than 30 days to cold storage
rclone move /var/log/app remote:cold-storage/logs/ \
--min-age 30d --include "*.log" --progress
Move Uploads to Permanent Storage
# Move uploaded files from staging to permanent storage
rclone move /tmp/uploads remote:media/uploads/ \
--delete-empty-src-dirs --progress --log-file /var/log/rclone-move.log
Safe Move Pattern (copy + verify + delete)
For mission-critical data, prefer this manual pattern over move:
# Step 1: Copy
rclone copy /srv/critical-data remote:archive/critical --progress
# Step 2: Verify
rclone check /srv/critical-data remote:archive/critical --one-way
# Step 3: Delete source only after verification passes
rm -rf /srv/critical-data/*
The copy + check + manual delete pattern gives you an explicit verification step before removing source files. Use this for data you cannot afford to lose.
move vs copy vs sync
| Behavior | move | copy | sync |
|---|---|---|---|
| Adds new files to destination | ✅ | ✅ | ✅ |
| Updates changed files | ✅ | ✅ | ✅ |
| Removes source files | ✅ | ❌ | ❌ |
| Deletes destination extras | ❌ | ❌ | ✅ |
| Best for | Draining queues | Backups | Mirrors |
Common Pitfalls
| Pitfall | Consequence | Prevention |
|---|---|---|
| Network failure mid-transfer | Partial move — some files at source, some at dest | Use --retries 3 and re-run on failure |
Forgetting --delete-empty-src-dirs | Empty directories pile up at source | Add the flag when you want clean source dirs |
| Moving active files | In-use files may fail or corrupt | Schedule moves during low-activity windows |
No --log-file | Can't determine which files were moved | Always log move operations |
Using move for backups | Source data is gone — not a backup | Use copy for backups |
What's Next
Examples with Output
1. Move a directory to a remote
Transfer all contents and remove the source local files. Command:
rclone move /home/user/exports gdrive:archives/exports -v
Output:
2024/01/15 12:00:00 INFO : data_2023.csv: Copied (new)
2024/01/15 12:00:00 INFO : data_2023.csv: Deleted
2. Move and clean up empty source directories
Ensure no empty folders are left behind locally. Command:
rclone move /tmp/staging remote:bucket/production --delete-empty-src-dirs
Output:
(Files moved, local '/tmp/staging' removed if empty)
3. Move only old files
Archive files that haven't been touched in 30 days. Command:
rclone move /logs remote:log-archive --min-age 30d --progress
Output:
Transferred: 50 MiB / 50 MiB, 100%, 5 MiB/s, ETA 0s
Transferred: 10 / 10, 100%
Elapsed time: 10.5s
4. Dry run of a move operation
See which files would be deleted from the source. Command:
rclone move /src /dest --dry-run
Output:
2024/01/15 12:00:00 NOTICE: file1.txt: Not moving as --dry-run is set
5. Move with server-side optimization
Move files between two buckets on the same provider (e.g., S3). Command:
rclone move s3:bucket1/data s3:bucket2/data --progress
Output:
Transferred: 0 / 0, -, 0 B/s, ETA -
Checks: 100 / 100, 100%
Transferred: 100 / 100, 100% (server-side moved)