Исключение папки из домашнего каталога с помощью списка исключений 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/, но это не так уж плохо в вашем случае.