How to migrate from Dropbox to OneDrive on macOS with Rclone
How to migrate from Dropbox to OneDrive on macOS with Rclone
OneDrive is one of the many public cloud storage file sync utilities out there to help keep your files in sync on all of your devices, keep your files backed up, and even free up space on your hard drive by downloading and thus storing/consuming disk space only the files you have recently modified or manually configured to be made available “offline” (without an Internet connection). Other examples of similar software include Dropbox, Box, and Google Drive. Each of the aforementioned apps have their strengths and weaknesses, but we’re going to focus on OneDrive here since that is the topic of this post.
I’ve recently been having problems with Dropbox ever since macOS 12.3 (Monterey) was released. The core problem is a much longer topic that is outside of the scope of this guide, but in short, Apple rolled out it’s new File Provider API in this recent macOS update. Prior to Apple enforcing the use of this new File Provider API, software developers used a variety of methods to accomplish similar goals of making files that are stored in the cloud available to users in their native filesystem — Finder for macOS or File Explorer for Windows folks — while keeping them in sync with other devices and consuming the least amount of disk space possible.
Again, I’m not going to dive into fuse, driveFS, symlinks, hardlinks, or other technical aspects of this discussion here. What Apple’s new File Provider API does is provide developers with a robust, safe, and seamless method for implementing the aforementioned goals related to making files stored in the cloud available to users in their native filesytem.
Prior to this point, some developers solutions worked much better than others (eg. Dropbox :cough: :cough:), but they relied on kernel extensions to get the job done. Aside from the security aspect, kernel extensions have long been a source of contention in the macOS user community because they have been known to cause kernel panics (the blue screen of death) or have other unwanted impacts like high memory and CPU usage. The new File Provider API fixes all of that, and even standardizes the little icons indicating if a file is available offline or is only in the cloud. Yep, no more little green circles for Dropbox users; everyone will see the same icons that iCloud uses, whether using Google Drive, OneDrive, or any other file provider application.
I was an avid Dropbox user prior to this point, but since I alredy have a Microsoft 365 subscription which comes with 5 TiB of OneDrive storage, I decided to make the switch and free myself from a nearly $200 annual expense.
To make the switch, I used a tool called Rclone, a free opensource software that is made for moving data to/from cloud storage providers. It is based off of and uses methodology very similar to that of Rsync (another great tool for local and remote copying of data freely available on Linux and macOS operating systems).
Installation
There are many ways to install Rclone1, see their documentation here. If you haven’t discovered Homebrew2, then I highly recommend you go here to learn more.
To install using Homebrew
brew install rclone
Rclone Commands
The first step is to configure our remotes. We’ll need two of them, one for Dropbox, and one for OneDrive. To do this, simply run rclone config
and follow the on screen prompts, using Defaults in all cases.
Next, we’re ready to do the migration, which will be accomplished using the rclone copy command to copy data from Dropbox to OneDrive
rclone copy dropbox: onedrive: --ignore-existing --progress -- human-readable --log-file=/path/to/log/file-$(date +"%F").log
What this command does:
-
rclone copy
– This is the copy command that tells rclone to copy data from one place to another -
dropbox:
– This is the name of our Dropbox remote we configured with therclone config
command -
ondrive:
– The is the name of our OneDrive remote, again created using therclone config
command -
--ignore-existing
– Because I have nearly 3 TiB of data in my Dropbox, I ran this command three separate times to fully copy all of the data but YMMV. This flag tellsrclone
to skip over any files that already exist in the destination if theirsize
andtimestamp
match. -
--progress
– Much like the standard Linuxverbose
flag, this tells rclone to display statistics on screen in the Terminal about the transfer progress in human readable format. -
--human-readable
– Just like it sounds, this tells rclone to display statistics on screen in the Terminal about the transfer progress in format that’s easy for people to understand. -
--log-file
– Pass this to rclone if you want to keep a log file (eg.--log-file=/path/to/rclone.log
). The example also appends the current date to the filename using shell command substitution (using the output of a command as an expansion).
Citations
1 Rclone is a command-line program to manage files on cloud storage
2 Homebrew – The Missing Package Manager for macOS (or Linux)