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

Я пытаюсь настроить 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,

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

1 ответ

Решение

Проще говоря, rsync использует относительные пути, чтобы определить, что исключить. Из rsync man-страница:

Если шаблон начинается с /, то он привязывается к определенной точке в иерархии файлов, в противном случае он сопоставляется с концом пути. Это похоже на ведущий ^ в регулярных выражениях. Таким образом, "/foo" будет соответствовать файлу с именем "foo" либо в "корне передачи" (для глобального правила) (…)

Самый простой способ обойти это - использовать --relative / -R, что позволяет исключить Dropbox следующим образом:

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

Имя relative относится к тому, как rsync отправляет пути и, следовательно, не имеет ничего общего с указанием шаблонов абсолютного исключения.

Обратите внимание, что это создает полное дерево каталогов /Volumes/Backup_Mac/Users/alex/, но это не так уж плохо в вашем случае.

Другие вопросы по тегам