Skip to main content

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.

Source Files Are Removed

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

FlagDescription
--dry-run / -nPreview what would be moved
--progress / -PShow real-time progress
--delete-empty-src-dirsRemove empty directories from source after move
--transfers NParallel transfers (default 4)
--bwlimit RATEBandwidth limit
--min-age DURATIONOnly move files older than this
--max-age DURATIONOnly move files newer than this
--include PATTERNOnly move matching files
--exclude PATTERNSkip matching files
--log-file PATHWrite 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/*
tip

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

Behaviormovecopysync
Adds new files to destination
Updates changed files
Removes source files
Deletes destination extras
Best forDraining queuesBackupsMirrors

Common Pitfalls

PitfallConsequencePrevention
Network failure mid-transferPartial move — some files at source, some at destUse --retries 3 and re-run on failure
Forgetting --delete-empty-src-dirsEmpty directories pile up at sourceAdd the flag when you want clean source dirs
Moving active filesIn-use files may fail or corruptSchedule moves during low-activity windows
No --log-fileCan't determine which files were movedAlways log move operations
Using move for backupsSource data is gone — not a backupUse 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)