---
title: Rsync To Dropbox / Jungle Disk
date: 2011-07-15 13:29:28
permalink: https://lesterchan.net/blog/2011/07/15/rsync-to-dropbox-jungle-disk/
author: Lester Chan
categories:
  - Programming
tags:
  - Dropbox
  - Jungle Disk
  - rsync
---

Just want to share some [rsync](http://www.samba.org/ftp/rsync/rsync.html) code snippets that I used to backup my data to either [Dropbox](http://www.dropbox.com/) or [Jungle Disk](https://www.jungledisk.com/) on my Mac.

I have problems finding/Googling the proper flags to use for rsync for Dropbox and Jungle Disk when I first got started with rsync on the Internet, hopefully this blog post will be useful for someone.

As Dropbox is essentially a folder on your Mac, the rsync flags are pretty straight forward, however the same cannot be said for Jungle Disk as it is using [WebDAV](http://en.wikipedia.org/wiki/WebDAV) and storing the file over at [Amazon S3](http://aws.amazon.com/s3/) or [Rackspace Cloud Files](http://www.rackspace.com/cloud/cloud_hosting_products/files/) where file modification times will not be accurate.

- I am using rsync 3.0.8. You can compile rsync 3.0.8 on your Mac by following [this tutorial](http://www.bombich.com/rsync.html). You just have to replace 3.0.7 with 3.0.8 in the commands.
- For Jungle Disk, I am using Rackspace Cloud Files instead of Amazon S3 because Rackspace does not charge for data transfer and hence it will be cheaper.
- I am doing an rsync from my remote host to my computer and any files not found on my remote host will be deleted on my computer.

Dropbox

```
/usr/local/bin/rsync -avz --delete --log-file='/path/to/Dropbox/logs/rsync/yourdomain.com.txt' --log-file-format='[%o] %f (%l bytes) (Last Modified: %M)' --exclude-from '/path/to/Dropbox/web/exclude_yourdomain.com.txt' -e ssh username@yourdomain.com:/home/username/public_html/ /path/to/Dropbox/web/yourdomain.com/
```

**Rsync Flag Description**

- **-a** aka **–archive** is a short hand for **-r -l -p -t -g -o -D**. Quick way of saying you want recursion and want to preserve almost everything 
    - **-r** aka **–recursive** Tells rsync to copy directories recursively
    - **-l** aka **–links** When symlinks are encountered, recreate the symlink on the destination
    - **-p** aka **–perms** Causes the receiving rsync to set the destination permissions to be the same as the source permissions
    - **-t** aka **–times** Tells rsync to transfer modification times along with the files and update them on the remote system
    - **-g** aka **–group** Causes rsync to set the group of the destination file to be the same as the source file
    - **-o** aka **–owner** Causes rsync to set the owner of the destination file to be the same as the source file
    - **-D** aka **–devices –specials** Causes rsync to transfer character and block device files to the remote system to recreate these devices as well as special files such as named sockets and fifos
- **-v** aka **–verbose** Increases the amount of information you are given during the transfer
- **-z** aka **–compress** Compresses the file data as it is sent to the destination machine, which reduces the amount of data being transmitted
- **–delete** Tells rsync to delete extraneous files from the receiving side (ones that aren’t on the sending side), but only for the directories that are being synchronized
- **–log-file** Tells rsync to log what it is doing to a file
- **–log-file-format** Specify exactly what per-update logging is put into the file
- **–exclude-from** Specifies a file that contains exclude patterns (one per line)
- **-e** Specifies the remote shell to use

**Layman’s Terms**

- I am logging the rsync operation to the file **/path/to/Dropbox/logs/rsync/yourdomain.com.txt** with the log format **\[%o\] %f (%l bytes) (Last Modified: %M)** which translate to (as an example) **2011/07/14 08:00:00 \[755\] \[recv\] path/filename.txt (1024 bytes) (Last Modified: 2011/07/13-01:00:00)**.
- I am excluding all files and folders contained in this text file **/path/to/Dropbox/web/exclude\_yourdomain.com.txt**. Each file or folder name you want to exclude should be on a new line in that text file.
- I am logging into **yourdomain.com** with the username **username** via SSH. You will be prompted to key in your password.
- Once my credentials are verified, I will be transferring all the files and folders in **/home/username/public\_html/** of the remote host to **/path/to/Dropbox/web/yourdomain.com/** in my local computer.

Jungle Disk

```
/usr/local/bin/rsync --verbose --recursive --omit-dir-times --times --inplace --size-only --delete --log-file='/Volumes/webdav/web/logs/yourdomain.com.txt' --log-file-format='[%o] %f (%l bytes) (Last Modified: %M)' --exclude-from '/Volumes/webdav/web/excludes/yourdomain.com.txt' -e ssh username@yourdomain.com:/home/username/public_html/ '/Volumes/webdav/web/yourdomain.com/';
```

**Rsync Flag Description**

- **–verbose** Increases the amount of information you are given during the transfer
- **–recursive** Tells rsync to copy directories recursively
- **–omit-dir-times** Tells rsync to omit directories when it is preserving modification times
- **–times** Tells rsync to transfer modification times along with the files and update them on the remote system
- **–inplace** Changes how rsync transfers a file when its data needs to be updated: instead of the default method of creating a new copy of the file and moving it into place when it is complete, rsync instead writes the updated data directly to the destination file
- **–size-only** Modifies rsync’s “quick check” algorithm for finding files that need to be transferred, changing it from the default of transferring files with either a changed size or a changed last-modified time to just looking for files that have changed in size
- **–delete** Tells rsync to delete extraneous files from the receiving side (ones that aren’t on the sending side), but only for the directories that are being synchronized
- **–log-file** Tells rsync to log what it is doing to a file
- **–log-file-format** Specify exactly what per-update logging is put into the file
- **–exclude-from** Specifies a file that contains exclude patterns (one per line)
- **-e** Specifies the remote shell to use

**Layman’s Terms**

- WebDAV folders are mounted to **/Volumes/** and assuming you have mounted Jungle Disk WebDAV folder to be called **webdav**.
- I am logging the rsync operation to the file **/Volumes/webdav/web/logs/yourdomain.com.txt** with the log format **\[%o\] %f (%l bytes) (Last Modified: %M)** which translate to (as an example) **2011/07/14 08:00:00 \[755\] \[recv\] path/filename.txt (1024 bytes) (Last Modified: 2011/07/13-01:00:00)**.
- I am excluding all files and folders contained in this text file **/Volumes/webdav/web/excludes/yourdomain.com.txt**. Each file or folder name you want to exclude should be on a new line in that text file.
- I am logging into **yourdomain.com** with the username **username** via SSH. You will be prompted to key in your password.
- Once my credentials are verified, I will be transferring all the files and folders in **/home/username/public\_html/** of the remote host to **/Volumes/webdav/web/yourdomain.com/** in my local computer.

Take a look at [Rsync Manual Page](http://www.samba.org/ftp/rsync/rsync.html) for more detailed explanations.

I am up for discussions under the comments =)