Исключение папки из домашнего каталога с помощью списка исключений rsync

6924
Alex

Я пытаюсь настроить rsyncдля OS X 10.8.4 с помощью файла исключения. Однако он не распознает пути, которые я хочу исключить.

Я хочу скопировать ABCдомашний каталог пользователя в папку, которая называется Backup_Macна подключенном внешнем диске.

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

excludelist.txt содержит

- /Users/ABC/Dropbox/ 

Это не исключая папку Dropbox.

Теперь, если я изменю файл исключения на

- Dropbox/ 

он исключает, ABC/Dropboxно также и все другие папки с именем Dropbox в другом месте дерева файлов. Это не то, что я хочу - я хочу исключить только папку, ABC/Dropboxно включить любые другие папки, называемые Dropbox, например ABC/Application Support/Dropbox.

Любой намек на то, как этого добиться? Как мне указать путь исключения, относящийся к резервной копии папки или к корню?

4
Ваш список буквально содержит дефис и пробел перед путем? slhck 10 лет назад 1
Оно делает. Я пробовал разные варианты (удаление дефиса и / или пробела), ни один из них не работает. Alex 10 лет назад 0

1 ответ на вопрос

4
slhck

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.

Это действительно решение. Большое спасибо, мой друг. Он также работает с использованием «файла исключений», потрясающе! Alex 10 лет назад 0
** Бонусное сопровождение: ** Нужно ли исключить каталог «Тома»? Я делаю следующее, но сообщения о ходе выполнения выглядят так, как будто они рассматривают файлы в каталоге Volumes: `rsync --archive --progress --verbose --inplace - exclude '/ Volumes' / / Volumes / NetBackup / iMacRsync / ` flipdoubt 8 лет назад 0
@flipdoubt Поскольку `/ Volumes` является прямым потомком корня, да, вам придется исключить его, когда вы хотите синхронизировать` / `. slhck 8 лет назад 1