8

При синхронизации удаленного резервного копирования я получаю сообщение об ошибке: rsync cannot delete non-empty directory .

Я знаю причину: я исключил некоторые файлы, и когда rsync пытается удалить удаленный каталог, потому что он не существует локально, он не может этого сделать, поскольку он не пустой. Без исключения каталог будет опустошен.

Я также знаю, что могу избавиться от проблемы с помощью --delete-exclude, но это не то, чего я хочу.

Я хотел бы пропустить загрузку определенных файлов (потому что они слишком велики для моей скорости загрузки), но я хочу сохранить те, которые я уже загрузил некоторое время назад, если они существуют локально. Если они не существуют локально, их следует удалить. --delete-исключить удалит их все на удаленной стороне.

Это также означает, что если каталог больше не существует локально, его следует удалить, даже если он содержит исключенные файлы.

Можно ли настроить rsync для достижения этой цели?

2 ответа2

3

Используйте модификатор p :

P указывает, что правило является скоропортящимся, то есть оно игнорируется в каталогах, которые удаляются. Например, правила по умолчанию опции -C, которые исключают такие вещи, как "CVS" и «* .o», помечены как скоропортящиеся, и не будут препятствовать удалению каталога, который был удален в источнике, в месте назначения.

Например, я использую опцию -F , которая «говорит rsync искать файлы для каждого каталога .rsync-filter, которые были разбросаны по иерархии, и использовать их правила для фильтрации файлов при передаче».

Мой .rsync-filter содержит такие строки, чтобы отфильтровывать эти "пометы", которые Mac оставляют после себя:

-p .DS_Store
-p ._*

Если вы используете exclude вместо просто - , добавьте запятую. Например :

exclude,p .DS_Store
exclude,p Thumbs.db
-2

просто используйте опции --max-size = xx и --delete в rsync. Он будет делать все автоматически и отвечать всем вашим требованиям.

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