Using rsync on Mac to Copy Files

There’s a lack of good file copy utilities on Mac like there is for Windows (eg. Teracopy/Ultracopy). If I need to copy a bunch of files where I’m likely to come across errors copying, I’ll use rsync!

This guide covers how to copy files on a Mac using an external drive or any connected network drive. It’ll skip any errors and log all the failed copies to a file for you to check through. It’s especially handy for copying files while skipping errors, corrupted files and getting past some permissions errors.

This is a beginner to intermediate guide and doesn’t cover some of the more advanced features of rsync.

Step by Step rsync for Beginners

Step 1:  Open Terminal.app    It is located in Applications/Utilities/
You can also open it the quick way by going to Spotlight and typing: terminal

Step 2: Type the following into Terminal, but do not press Enter. (note there is a space at the end of the command and the P is a capital letter)

rsync -ahP

Step 3: Drag and drop the SOURCE folder onto the Terminal window. This is the folder that has the items you want to copy.

Step 4: Drag and drop the DESTINATION folder onto the Terminal window. This is the folder you want the files to go to.

Step 5: Add the following to the end of the command (note the space after the destination folder):

2> ~/Desktop/rSyncErrors.txt

Step 6: Press Enter!
You will see the files transferring as they go, if there’s a lot of files it’ll fly by pretty quickly. Just wait until it has finished.

At the end you will see a summary of how much has copied and how fast it went.

Checking for Errors

To Check for Errors, there is a file on your Desktop called rSyncErrors.txt, this will contain any errors during the copy and why they failed to copy.

What does the command mean?

rsync is a really powerful program that can do a whole lot of stuff, the command I wrote above is a very simple one designed to copy data quickly and easily without too much fuss.

Here’s a run down on the different parts of the command:

rsync -ahP {source} {destination} 2> ~/Desktop/rsyncErrors.txt

rsync   — Runs the rsync command

-ahP        — These are called Switches. They tell the program to run with particular options.

a  – This tells it to archive, it will preserve permissions, modified/created dates and any other extra data with the file.

h  – Human Readable. This tells it to display all the values in human readable form (instead of “112543662.08 bytes”, it will show “107.33MB”)

P  – Progress/Partial – This is actually 2 commands in one. Progress will show you the progress of each file as it transfers (so you can see that it’s actually copying data). Partial will resume files that have been inturrupted part way through copying.

2> ~/Desktop/rsyncErrors.txt   – This tells it to send any errors to the file on your desktop called rsyncErrors.txt.

Extra Tips

If you want to cancel an rsync part way through running, you can press Control-C to stop it. It won’t undo anything that has been done though, so you’ll end up with only part of the data copied.

rsync can resume from a failed copy. For example, if you’ve got a hard drive that tends to disconnect randomly, you can redo the command and it will resume from where it left off.

If you’re having trouble with permissions and copying files, you can run the command as sudo (type “sudo ” before the command). This will run it as an Administrator. Though with the settings I’ve specified, it’ll just copy the permissions errors along with it!

Advanced Version

(Skip this if you’re not sure what you’re doing!)
The terminal command to use rsync to copy files is:

rsync -ahP {source} {destination} 2> ~/Desktop/rsyncErrors.txt

Did this work well for you? Any problems?  Please leave a comment below!

57 comments

This worked absolutely fine. Thanks for amazing blog.

Great stuff! Thx, worked great for me.

You seem like a good person to ask… Im in the process of transferring a good bunch of data between servers. 5tb roughly… I’m transferring all onto an external drive, rebuilding my server & then transferring back. Do you know of a good Mac app that could either run rsync or another integrity check and also offer a pause/resume functionality? I found ShotPut Pro but the price was too steep for me.

If not I guess I could do the lot via this command, was just wondering if you knew a good program that could streamline the process a bit. thx for the post anyways!

rsync you can stop it mid way then run the same command again and it’ll resume (well, it’ll skip everything that’s already been copied).
As for integrity checking though – not sure about that one… I know rsync uses md5 hashes to check a file’s all there? There’s a good answer on this page: https://unix.stackexchange.com/questions/30970/does-rsync-verify-files-copied-between-two-local-drives

Good luck with the file copying, and make sure you’ve got more than one copy! (always backup!)

Thank you so much!

Thanks for the guide.
One question about rsync, specifically for backing up the same directories regularly – how deep does it check within subfolders to check if the files are the same or not?
Would it copy over entire folders replacing what already exists, or would it go 5 folders deep and only update the single file that was changed?

I believe it goes forever deep. It would just update the single file that changed (as far as I’m aware..) I believe you can set limits on how deep it goes if you read the man page for it.

I have a shell script on MAC OS to run rsync to sync a local folder to one on iCloud. Works fine with Terminal.

When running it as a cronjob I get the following errors –

2024-07-27 03:41:00 – START
2024-07-27 03:41:00 – Deleted old log file: /Users/me/Downloads/Folder Sync Log/sync_log.txt
– END ——————-
2024-07-27 03:41:00 – Invalid line: # Enter Source and Destination folders that you want to Sync
2024-07-27 03:41:00 – Invalid line:
2024-07-27 03:41:00 – Processing pair: Source=”/Users/me/Downloads”, Destination=”/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads”
2024-07-27 03:41:00 – Moving files and folders missing from source to Deleted folder
find: /Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads: Operation not permitted
2024-07-27 03:41:00 – Syncing “/Users/me/Downloads” to “/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads”
building file list … rsync: opendir “/Users/me/Downloads/.” failed: Operation not permitted (1)
done

sent 72 bytes received 20 bytes 184.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/91a344b1-f985-11ee-b563-fe8bc7981bff/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
2024-07-27 03:41:00 – Error occurred during syncing “/Users/me/Downloads” to “/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads”.
– END ——————-
2024-07-27 03:41:00 – Syncing “/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads” to “/Users/me/Downloads”
building file list … rsync: opendir “/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads/.” failed: Operation not permitted (1)
done

sent 72 bytes received 20 bytes 184.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/91a344b1-f985-11ee-b563-fe8bc7981bff/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
2024-07-27 03:41:00 – Error occurred during syncing “/Users/me/Library/Mobile Documents/com~apple~CloudDocs/Downloads” to “/Users/me/Downloads”.
– END ——————-

Please advise.

Leave a Reply