4

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

4

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .