Excluding a folder from the home directory with rsync exclude list

8,748

Simply put, rsync uses relative paths to determine what to exclude. From the rsync manpage:

If the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files, otherwise it is matched against the end of the pathname. This is similar to a leading ^ in regular expressions. Thus "/foo" would match a file named "foo" at either the "root of the transfer" (for a global rule) (…)

The simplest way to work around this is to use --relative / -R, which lets you exclude Dropbox like so:

rsync -avR --exclude='/Users/alex/Dropbox' /Users/alex /Volumes/Backup_Mac

The name relative refers to how rsync sends the paths and therefore doesn't have anything to do with specifying absolute exclude patterns.

Note that this creates the full directory tree /Volumes/Backup_Mac/Users/alex/, but that's not a terribly bad thing in your case.

Share:
8,748

Related videos on Youtube

Alex
Author by

Alex

Updated on September 18, 2022

Comments

  • Alex
    Alex almost 2 years

    I am trying to set up rsync for OS X 10.8.4 using an exclude file. However, it does not recognize the paths I want to exclude.

    I want to copy the user ABC's home directory to a folder called Backup_Mac on a mounted external drive.

    rsync -av --progress --exclude-from='/Users/ABC/excludelist.txt' /Users/ABC /Volumes/Backup_Mac
    

    excludelist.txt contains

    - /Users/ABC/Dropbox/
    

    It is not excluding the Dropbox folder.

    Now if I change the exclude file to

    - Dropbox/
    

    it is excluding ABC/Dropbox but also all other folders named Dropbox elsewhere in the file tree. This is not what I want – I want to exclude only the folder ABC/Dropbox but include any other folders called Dropbox, e.g. ABC/Application Support/Dropbox.

    Any hint on how to achieve that? How do I have to specify the exclude path, relative to the folder backed up, or relative to root?

    • slhck
      slhck almost 11 years
      Does your list literally contain a hyphen and a space before the path?
    • Alex
      Alex almost 11 years
      It does. I tried different variations (removing hyphen and/or space), none of them work.
  • Alex
    Alex almost 11 years
    That is the solution, indeed. Many thanks my friend. It also works using the 'exclude file', awesome!
  • flipdoubt
    flipdoubt over 8 years
    Bonus Followup: Does one need to exclude the Volumes directory? I'm doing the following, but the progress messages look as though it is considering files within the Volumes directory: rsync --archive --progress --verbose --inplace -- exclude '/Volumes' / /Volumes/NetBackup/iMacRsync/
  • slhck
    slhck over 8 years
    @flipdoubt Since /Volumes is a direct child of the root, yes, you'd have to exclude it when you want to sync /.