Skip to content

wp omnioffloader move

Moves offloaded media into the folder new offloads go to, including media offloaded to an earlier provider or bucket. The admin screen with the same job is OmniOffloader → Tools → Move Media to the Current Folder, shown when some media is outside the current folder.

Tools → Move Media to the Current Folder, the admin screen for the same job

Each attachment remembers the folder it was offloaded to. After you change the Path Prefix, older media stays in the old folder and keeps loading from there. move brings that media into the current folder, so everything is in one place again.

For each attachment outside the current folder:

  1. Same bucket (the usual case after a Path Prefix change): your storage provider copies each of the attachment’s files into the current folder itself. Nothing is downloaded to your server, and the files on your server are not touched.
  2. The copies are checked, and the attachment switches to the new folder: its URLs change right away.
  3. The old copies are deleted.

When a file can’t be copied that way (larger than 5 GB, or the attachment is in another bucket or with another provider), that attachment is moved through your server instead: it is brought back, offloaded again into the current folder (your retention policy then cleans up the local files, as for any offload), and then its old copies are deleted.

Terminal window
wp omnioffloader move (--all | --ids=<ids>) [--limit=<number>] [--keep-old] [--yes] [--dry-run] [--force] [--concurrency=<number>]
Option Description
--all Move every offloaded attachment that is outside the current folder.
--ids=<ids> Comma-separated attachment IDs to move. IDs already in the current folder are skipped.
--limit=<number> Stop after this many attachments.
--keep-old Keep the old copies in the old folder.
--yes Skip the confirmation question (needed in the background).
--dry-run List what would move, change nothing.
--force Run even while a bulk job started from the admin screen is active.
--concurrency=<number> Files copied (or downloaded and uploaded) at the same time, 1 to 64, instead of the Transfer Speed setting (at most 10). For a VPS or dedicated server; start with 32.

See what would move:

Terminal window
wp omnioffloader move --all --dry-run
Would move 1240 attachment(s) into shop/:
53 Team photo (now in 2026/08/)
112 Product video (now in 2026/09/)

Move everything in the background, 32 files at once, with a log file (see Long runs and log files):

Terminal window
nohup wp omnioffloader move --all --yes --concurrency=32 > ~/move.log 2>&1 &

--yes is needed in the background, because nobody can answer the confirmation question there.

Follow it with wp omnioffloader status and stop it with wp omnioffloader stop. Run the same command again to continue: attachments already moved are skipped.

  • The old copies are deleted only after the new ones are confirmed in the bucket.
  • If the new upload fails, the attachment stays on the server and loads from there. Run wp omnioffloader offload --all later to offload it.
  • Edit backups and other extra files that are not uploaded again keep their old copies.
  • Old copies in a folder that another site took over are not deleted, because they may now be that site’s files.
  • On a staging or development copy (Safe mode), the command refuses to run. A dry run still works.

Within the same bucket, a move needs no disk space and no bandwidth on your server: the provider copies the files. Use --concurrency to run more copies at once.

Attachments moved through the server (another bucket, or a file over 5 GB) need room for one attachment’s files at a time:

Retention policy What each of those moves downloads
Retain Local Files nothing: the files are already on the server
Smart Local Cleanup the thumbnail sizes
Full Cloud Migration every file of the attachment

The command stops with a clear message when the server runs out of space.