Selective Restores on macOS
Note: This post is not yet finished
I have owned a Mac continuously for the last 8 years as part of my job and used it full time both professionally and personally. Over that time I have carried a lot of crap from machine to machine, and a lot of that was very work specific. Certs, credentials, applications, and other various configurations and files. I've always just performed a full Time Machine restore each time I upgraded.
I recently switched employers, and wanted to start mostly fresh, but with the ability to keep some of the more generic configurations on my Mac like VIM configurations, and the ability to bring over personal files. I wasn't sure how I was going to approach this at first. I imagined, that I would just take a Time Machine backup, perform a fresh install, and then use the Migration Assistant to uncheck some things I don't want.
Using the Time Machine backup and Migration Assistant, seemed like a great idea, although Migration Assistant doesn't give you the fine grain control over individual files and directories that are more than 1 level deep.
Fortunately the Time Machine backup is easy to navigate, and with a little help from
rsync I was in business.
First, perform fresh install of macOS, and then once you get the OS up and running, plug in your Time Machine backup. The files from the Time Machine backup should be accessible at a path like:
I'd recommend just switching to this directory to do your work:
cd /Volumes/Untitled/Backups.backupdb/HOSTNAME/Latest/Macintosh\ HD/
A little tip that I can offer here, is to start with "visibile" (non-hidden) files and directories, and a good way to separate them is to first start with your home directory and just do a simple
cd Users/USERNAME ls
The output will look something like:
Applications VirtualBox int-fail.txt Desktop alice octal.txt Documents ansible onboarding.txt Downloads ansible_testing ooto.txt Dropbox apps.txt projects Library ascript python_venvs_bak Movies bin roms Music buildpy.txt ssl Pictures docker todelete.txt Prezi drone venvs Public funky webhook-phonehome.txt Sites git VMs go
From here, we'll use rsync, and work column by column to make it easier:
rsync -av Applications Desktop Documents Movies Music Pictures Prezi Public Sites /Users/USERNAME/
You'll notice a few things in that command. First, I skipped some directories like
Dropbox will re-sync on it's own, and I don't want
Library as I am trying to start clean. I'll grab a few individual things from
Library later. Additionally, there are no trailing slashes on any of those directories; This is to support rsync, and make sure we are copying things correctly, as we want to copy the directories to our new home directory, and not just the contents of those directories. Include the trainling slash, and you will end of with a bunch of things directly in your home directory you weren't anticipating on.
Run this through for the remaining directories and files.
Next, we'll do the hidden files and directories:
ls -a | grep '^\.'
You won't get all of the columns you did before, but you could step through it with
tail if you wanted.
Proceed rsyncing with the hidden files and directories, omitting anything you don't want, or that will be rebuilt later.
Now is when I went cherry picking some individual files from
Library such as:
Library/Fonts/Monaco+for+Powerline.otf Library/Preferences/com.googlecode.iterm2.plist Library/Containers/com.mactaris.Webcam-Settings/Data/Library/Preferences/com.mactaris.Webcam-Settings.plist
Something else to note here, is that I didn't restore anything from
/Applications, although feel free to do so. I wanted to try and start as fresh as possible, so I installed everything from scratch. On one hand I found that an app I used called DashExpander no longer exists, so I just used the built in text replacement functionality in macOS. Maybe, I'll go back and grab this old app.
Outside of using Time Machine for backups, I've recently started using Arq Backup, paired with Backblaze B2 for storage. I found in my travels that I deleted something a while back that I needed, and was able to get that from my Arq backups.